获取数据集
本文将介绍如何使用OpenAI API来进行情感分析,以预测文本的情感属性,本教程将使用Amazon的美食评论数据集,并演示如何将评论汇总为一个单独的嵌入向量。
1.加载数据集
本例中使用的数据集是来自亚马逊的美食评论。 该数据集包含截至 2012 年 10 月亚马逊用户留下的总共 568,454 条食品评论。我们将使用该数据集的一个子集,其中包含 1,000 条最新评论以用于说明目的。 评论是英文的,往往是正面的或负面的。 每条评论都有一个 ProductId、UserId、Score、评论标题(摘要)和评论正文(文本)。
我们会将评论摘要和评论文本合并为一个组合文本。 该模型将对该组合文本进行编码,并输出单个向量嵌入。
要运行此笔记本,您需要安装:pandas、openai、transformers、plotly、matplotlib、scikit-learn、torch(transformer dep)、torchvision 和 scipy。
# imports import pandas as pd import tiktoken from openai.embeddings_utils import get_embedding
# embedding model parameters embedding_model = "text-embedding-ada-002" embedding_encoding = "cl100k_base" # this the encoding for text-embedding-ada-002 max_tokens = 8000 # the maximum for text-embedding-ada-002 is 8191
# load & inspect dataset input_datapath = "data/fine_food_reviews_1k.csv" # to save space, we provide a pre-filtered dataset df = pd.read_csv(input_datapath, index_col=0) df = df[["Time", "ProductId", "UserId", "Score", "Summary", "Text"]] df = df.dropna() df["combined"] = ( "Title: " + df.Summary.str.strip() + "; Content: " + df.Text.str.strip() ) df.head(2)
时间 | 产品编号 | 用户身份 | 分数 | 概括 | 文本 | 合并 | |
---|---|---|---|---|---|---|---|
0 | 1351123200 | B003XPF9BO | A3R7JR3FMEBXQB | 5 | 一个人从哪里开始…和停止…用一个… | 想存一些给我芝加哥的家人…… | 标题:从哪里开始……到哪里结束……机智…… |
1 | 1351123200 | B003JK537S | A3JBPC3WFUT5ZP | 1 | Arrived in pieces | 一点都不高兴。 当我打开盒子时,莫… | 标题:分片抵达; 内容:不高兴… |
# subsample to 1k most recent reviews and remove samples that are too long top_n = 1000 df = df.sort_values("Time").tail(top_n * 2) # first cut to first 2k entries, assuming less than half will be filtered out df.drop("Time", axis=1, inplace=True) encoding = tiktoken.get_encoding(embedding_encoding) # omit reviews that are too long to embed df["n_tokens"] = df.combined.apply(lambda x: len(encoding.encode(x))) df = df[df.n_tokens <= max_tokens].tail(top_n) len(df)
1000
2.获取嵌入并保存以备将来重用
# 确保根据自述文件在您的环境中设置了 API 密钥:https://github.com/openai/openai-python#usage # 这可能需要几分钟的时间 df["embedding"] = df.combined.apply(lambda x: get_embedding(x, engine=embedding_model)) df.to_csv("data/fine_food_reviews_with_embeddings_1k.csv")
评论 (0)