在本文中,我将为大家介绍如何下载Facebook Messenger上的聊天数据,并将其用于训练语言模型。这个过程包括从下载数据到微调模型的完整步骤,以及如何在应用程序中使用微调后的模型。
1. 下载数据
首先,你需要从Facebook下载你的Messenger聊天记录。确保下载的数据格式为JSON,这是为了方便后续的处理。你可以按照这里的指引进行下载。为了演示,我们将使用一个预先准备好的数据集示例。
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)
2. 创建聊天加载器
接下来,我们将使用 langchain_community.chat_loaders.facebook_messenger 中的加载器类来加载聊天记录。可以选择加载某个目录中的所有聊天记录,也可以只加载某个特定聊天记录文件。
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])
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")
确保你有足够的训练数据,我们可以将对话数据划分为多个训练样本。
4. 微调模型
在开始微调之前,请确保你已安装openai库并设置了你的API密钥。
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",
)
5. 在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)
结束语:如果遇到问题欢迎在评论区交流。
—END—
400

被折叠的 条评论
为什么被折叠?



