답변을 하는 척하다가 중간부터 의미없는 말을 생성합니다.

#4
by keisey - opened

답변을 하는 척하다가 중간부터 의미없는 말을 생성합니다. 아래는 답변의 예입니다.

가명처리와 가명정보처리의 차이점이 뭐야?

Answer: 가명처리란 개인정보를 삭제, 대체 등의 방법으로 처리하여 추가정보와 결합해도 원래의 개인정보를 확인할 수 없도록 하는 것을 말합니다. 가명정보란 개인정보를 가명처리한 정보로, 추가정보와 결합해도 원래의 개인정보를 확인할 수 없도록 처리한 정보를 말합니다. Q 2 가명처리에 대한 이해 가명처리란 개인정보를 삭제, 대체 등의 방법으로 처리하여 추가정보와 결합해도 원래의 개인정보를 확인할 수 없도록 하는 것을 말합니다. Q 3 가명처리 절차 가명처리의 절차를 알아보겠습니다. ① 목적설정 가명처리의 목적을 설정합니다. ② 사전준비 가명처리를 위한 사전준비를 합니다. ③ 가명처리 개인정보를 가명처리합니다. ④ 적정성 검토 가명처리한 정보가 목적에 부합하는지 여부를 검토합니다. ⑤ 안전한 관리 가명처리한 정보를 안전하게 관리합니다. ⑥ 위험성 검토 가명처리한 정보가 목적에 부합하는지 여부를 검토합니다. ⑦ 부록 가명처리한 정보를 목적에 부합하는지 여부를 검토합니다. Q 4 가명처리 절차에 대한 이해 가명처리 절차에 대해 자세히 알아보겠습니다. ① 목적설정 가명처리의 목적을 설정합니다. ② 사전준비 가명처리를 위한 사전준비를 합니다. ③ 가명처리 개인정보를 가명처리합니다. ④ 적정성 검토 가명처리한 정보가 목적에 부합하는지 여부를 검토합니다. ⑤ 안전한 관리 가명처리한 정보를 안전하게 관리합니다. ⑥ 위험성 검토 가명처리한 정보가 목적에 부합하는지 여부를 검토합니다. ⑦ 부록 가명처리한 정보를 목적에 부합하는지 여부를 검토합니다. Q 5 가명처리 절차에 대한 이해 가명처리 절차에 대해 자세히 알아보겠습니다. ① 목적설정 가명처리의 목적을 설정합니다. ② 사전준비 가명처리를 위한 사전준비를 합니다. ③ 가명처리 개인정보를


위와 같이 제대로 된 답을 하다가 이상한 말을 합니다. 다른 질문을 하더라도 처음에는 제대로 답변하는 듯 하다가 이상한 말을 계속 덧붙입니다.
아래는 소스 코드입니다.

def __init__(self, model_id: str = "saltlux/Ko-Llama3-Luxia-8B", device="cuda"):


    self.tokenizer = AutoTokenizer.from_pretrained(
        model_id, cache_dir=CACHE_DIR
    )
    quantization_config = BitsAndBytesConfig(
        load_in_4bit=True, bnb_4bit_compute_dtype=torch.bfloat16
    )

    self.model = AutoModelForCausalLM.from_pretrained(
        model_id,
        device_map="auto",
        quantization_config=quantization_config,
        cache_dir=CACHE_DIR
    )
    self.model.generation_config.pad_token_id = self.model.generation_config.eos_token_id
    self.model.eval()
    self.chat = []
    self.device = device

def generate(self, question: str, context: str = None, max_new_tokens: int = 512):

    terminators = [
        self.tokenizer.eos_token_id,
        self.tokenizer.convert_tokens_to_ids("<|eot_id|>")
    ]

    if context == None or context == "":
        prompt = f"""Give a detailed answer to the following question. Question: {question}"""
    else:
        prompt = f"""Using the information contained in the context, give a detailed answer to the question.

Context: {context}.
Question: {question}"""

    chat = [{"role": "user", "content": prompt}]
    formatted_prompt = self.tokenizer.apply_chat_template(
        chat,
        tokenize=False,
        add_generation_prompt=True
    )

    print("formatted_prompt : ", formatted_prompt)
    inputs = self.tokenizer.encode(
        formatted_prompt, 
        add_special_tokens=True, 
        return_tensors="pt"
    ).to(self.device)

    with torch.no_grad():
        outputs = self.model.generate(
            input_ids=inputs,
            max_new_tokens=max_new_tokens,
            do_sample=True,
            temperature=0.6,
            top_p=0.9,
            eos_token_id=terminators
        )

    response = outputs[0][inputs.shape[-1]:]
    response = self.tokenizer.decode(response)
saltlux org

안녕하세요.
본 모델은 사전학습 모델입니다.
예시에 있는 질의에 대한 적절한 응답을 받기 위해 Instruct-tuning 이후 사용해보시길 권장드립니다.

추가적으로 입력 간 텍스트 맨 앞 부분에 "<|begin_of_text|>"라는 bos_token을 토큰을 추가적으로 붙혀서 추론하시는 것을 추천드립니다. :)

추가적으로 입력 간 텍스트 맨 앞 부분에 "<|begin_of_text|>"라는 bos_token을 토큰을 추가적으로 붙혀서 추론하시는 것을 추천드립니다. :) <---- 이 부분은 어떻게 코딩하면 되나요?
그리고 추가를 하면 어떤 효과가 있나요?

Sign up or log in to comment