当前位置: 首页 > 科技观察

ChatGPT开发实战——酒店点评情感分析

时间:2023-03-13 07:03:20 科技观察

译者|朱宪忠审稿人|孙淑娟OpenAI的新聊天GPT厉害了我是一名研究员,每天都和人工智能技术打交道。可以说,在我的位置上,每个人都像狗盯着冰淇淋甜筒一样兴奋。原因如下:对于那些不知道我在说什么的人,只要知道ChatGPT是一个人工智能聊天机器人,它几乎可以帮助您处理所有事情。它会写代码,它会写文章,它可以帮你装饰你的家,它甚至可以做食谱(如果你是意大利人,那么我不建议你这样做),还有很多其他的事情让它为你代劳。我们可以说,这将在未来引发伦理(而不仅仅是伦理)问题。我的母亲是一名高中老师,她害怕她的学生会使用ChatGPT来考试作弊。当然,这只是这种强大技术“出问题”的众多例子之一。但问题是使用,而不是产品。如果我们严格地谈论技术方面(坦率地说,这对我来说更有趣,因为我是一个“经过认证的”书呆子),这是令人难以置信的。现在,许多开发人员已经使用并测试了这个聊天机器人,以尝试开发他们的代码和AI想法。当然,这个聊天机器人的使用完全取决于您的背景。例如,如果您是Web开发人员,您会要求ChatGPT使用HTML构建网站。如果您是测试人员,您可以请ChatGPT帮助您查找特定系统中的错误。就个人而言,我是一名研究员。特别是,我所做的工作是用人工智能构建一些代理模型。例如,你想对“A”做研究,但要完成“A”任务你需要大量的资金、人力和计算时间。这种替代模型背后的想法是用数据驱动的人工智能方法取代传统的实现。现在,让我们暂时彻底改变话题。假设我是一名企业家,我在美国拥有很多酒店。如果对一家酒店进行了某条评论,我想知道该评论对酒店来说是好是坏。我应该怎么办?我有三个选择:1.我雇了一个人,每天阅读和分类数百万条评论,然后我可能会被逮捕,因为这明显侵犯了人权。2.我雇了一个人,每天阅读数百条评论并对其进行分类。几个月后,我能够用这些信息构建一个数据集。然后,我根据这个数据集训练机器学习模型。3.我自动生成好评和差评。然后,我自己从中构建了一个数据集,最后我从该数据集训练了一个机器学习模型。事不宜迟,让我们跳过第一个选项。第二个选项是在ChatGPT诞生之前就已经完成的事情。显然,您无法提前知道评论是好是坏;所以,如果你想使用这些信息来构建数据集,那么你需要雇人并等待数据集准备好行动。现在我们有了ChatGPT,我们可以简单地要求它为我们生成好的和坏的评论!这将花费几分钟(而不是几个月),并允许我们构建机器学习算法来自动对我们的客户评论进行分类!恭喜,这是您的第一个代理模型。请记住,我们不训练ChatGPT或进行任何微调。该模型非常适合此类不需要微调的任务。现在,ChatGPT模型的训练当然不是开源的(就像模型本身一样)。我们所知道的只是官方OpenAI博客中的简短描述。他们解释说,该模型是由人工智能训练师和强化学习监督算法训练的。OpenAI的ChatGPT不是开源这一事实引发了一些非常棘手和有趣的道德问题。如此强大的模型应该开源——以便每个人(包括坏人)都可以使用它,还是不应该开源?那么,真的没有人可以信任它吗?现在我把上面的大致步骤总结一下:大家在上图中看到的小脑壳就是代理模型。正如我们稍后将看到的,这将是一个随机森林。不过我说了这篇文章是一篇实战文章,那就挖坑吧!(太激动了!!!)对不起我爱剧透。1.生成数据集第一步是使用OpenAI的PythonAPI生成模拟。为此,需要考虑以下几点:1.OpenAI库是由天才为非天才用户创建的。所以如果你想安装它,只需执行:pipinstall--upgradeopenai2。当然,如果要发送大量请求,则必须支付高级服务费用。假设我们不想这样做,我们只需要等待大约30分钟就可以得到一个虚拟评论信息的数据集。同样,如果我们手动执行此操作,与等待数月的时间(和成本)相比,这将是微不足道的。另外,必须登录OpenAI官网,获取OpenAI库对应的key。3.我们会自动输入这是好评还是差评,开头都是同一句话:“这家酒店太糟糕了。”差评:“这家酒店很棒。”一个好的审查。总之,ChatGPT将为我们完成审核工作。当然,除了前四个字(无论如何我们不会包括在评论中)之外,评论的其余部分将有所不同。让我举一个差评的例子:importopenaiimporttimeopenai.api_key="your_key"completion=openai.Completion.create(engine="davinci",prompt="Thishotelwasterrible.",max_tokens=120)print(completion.choices[0]['text'])接下来我再举一个很好的例子:completion=openai.Completion.create(engine="davinci",prompt="Thishotelwasgreat.",max_tokens=120)print(completion.choices[0]['text'])现在,我们给出生成整个数据集所需的代码。good_reviews=[]bad_reviews=[]foriinrange(0,500):completion=openai.Completion.create(engine="davinci",prompt="这家酒店很棒。",max_tokens=120)good_reviews.append(completion.choices[0]['text'])print('生成好评数%i'%(i))completion=openai.Completion.create(engine="davinci",prompt="这家酒店很糟糕。",max_tokens=120)bad_reviews.append(completion.choices[0]['text'])print('生成差评数%i'%(i))display=np.random.choice([0,1],p=[0.7,0.3])time.sleep(3)如果显示==1:display_good=np.random.choice([0,1],p=[0.5,0.5])如果display_good==1:print('打印随机好评')print(good_reviews[-1])ifdisplay_good==0:print('打印随机差评')print(bad_reviews[-1])然后,我们使用Pandas库来把一份内容存储到一个数据框架DataFrame中。为此,首先导入库并构建数据框df:importpandasaspdimportnumpyasnpdf=pd.DataFrame(np.zeros((1000,2)))接下来,填充数据框结构df:df.columns=['Reviews','Sentiment']df['Sentiment'].loc[0:499]=1最后导出数据框df:df.to_csv('generated_reviews.csv')二、开始机器学习现在,我们需要建立和训练机器学习算法。当我们处理文本时,我们需要做的第一件事就是使用矢量化器。矢量器负责将文本转换为矢量的任务。示例:如您所见,相似的文本对应于相似的向量(“相似”是一个棘手的概念,我知道,但您知道我的意思)。此外,不同的文本具有不同的向量。有很多方法可以对步骤进行矢量化。有些比其他的更复杂;有些比其他的更有效率;有些需要机器学习,有些则不需要。出于本文中该项目的目的(因为我不是NLP机器学习工程师),我们将使用一个相当简单的工具,称为TfIDFvectorizer,它在SkLearn框架上开箱即用。让我们从导入库开始:importpandasaspdimportnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.ensembleimportRandomForestClassifierfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportconfusion_matrix,plot_confusion_matrixfromsklearn.feature_extraction.textimportTfidfVectorizer然后,导入我们刚刚使用ChatGPT生成的数据集,以及一些预处理工作:.dropna().reset_index()数据集头部数据如下:Great!现在,让我们做一个向量化的事情:dataset=labeled_datafromtransformersimportAutoTokenizer#tokenizer=AutoTokenizer.from_pretrained("bert-base-uncased")#tokenized_data=tokenizer(dataset["Reviews"].values.tolist(),return_tensors="np",padding=True)vectorizer=TfidfVectorizer(max_features=2500,min_df=7,max_df=0.8)tokenized_data=vectorizer.fit_transform(dataset['Reviews']).toarray()labels=np.array(数据集["情怀t"])#Label已经是一个0和1的数组之前介绍过,我们要用到的机器学习模型叫做RandomForest什么是RandomForest?简单来说就是决策树的集合。所以,什么是决策树?决策树是一种机器学习算法,在给定满足相应条件的特定理论条件下,对数据集特征的所有可能的分裂进行优化树搜索,直到找到基于分裂的树搜索至此我想出了一个区分什么是1什么是0的方法。抱歉,这个解释可能太混乱了;但是仅仅4行文字就给出一个通用的解释确实是一项艰巨的任务。有一个这篇文章花了很多时间解释这个并且做得很好。我强烈建议你看看它。现在,让我们开始工作:1.定义我们的随机森林:rf=RandomForestClassifier(n_estimators=100)2.拆分我们的数据集分为训练和测试部分:X=tokenized_datay=labelsX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)3.开始训练模型:rf.fit(X_train,y_train)训练输出非常可观,尤其是在没有超参数微调的情况下提供。3.情感分析到目前为止,我们有一个训练好的模型;因此,它已准备好用于新的、未标记的数据集。为此,我使用了我在网上找到的一组纽约市酒店评论来进行测试。当然,你也可以使用自己的Comment,甚至写评论,看看模型是如何工作的。我为本文提供的数据集是开源的(在CC0许可下),非常小(2MB),并且可以在Kaggle上下载。现在,让我们对评论列(或文本)进行预处理:]).toarray()y_pred=rf.predict(new_data_processed)然后,打印我们的预测结果:J=np.random.choice(range(0,len(new_data_processed)),5)forjinJ:print('Reviewnumber%i:\n'%(j))print(target_data['review'].loc[j])print('分类为%i(1=good,0=bad)'%(y_pred[j]))正如我们所看到的,以上5条随机评论都归为1,其实也很不错!现在,让我们对上述数据的统计计数结果给出一个更直观的示意图:4.其他一些问题在这篇论文中,我们做了哪些具体的工作?首先,我们确信ChatGPT很棒。然后,我们使用ChatGPT为代理模型构建了一个数据集。更具体地说,我们使用ChatGPT来组成正面和负面的酒店评论数据。接下来,我们使用我们构建的标记数据集来训练机器学习模型。在本文的示例中,我们使用的模型是随机森林分类器。最后,我们在一个新的数据集上测试了我们训练好的模型,得到了令人满意的结果。那么,上述案例还有改进的余地吗?当然还有很多,比如:1.我们可以获得OpenAI高级服务,产生1000多条评论。2.我们可以通过提供不同的输入来提高我们的查询技能,也许是其他语言,而不仅仅是英语。3.我们还可以通过做一些超参数调整来进一步改进机器学习模型。现在,我不禁想到以下几个问题。如何以及谁将使用OpenAI的ChatGPT?自然,这方面有很多顾虑。虽然我不是律师(更不用说道德人工智能专家了),但我可以想象这个工具在许多方面和许多不同层面上有多么危险。我强烈反对那些对ChatGPT的性能没有印象的人,因为我觉得它非常令人惊讶,我很高兴看到这项技术将如何发展。但是,我希望本文中介绍的玩具示例也能引起读者的共鸣。译者介绍朱宪忠,社区编辑,专家博主,讲师,潍坊某高校计算机教师,自由编程资深人士。原标题:Hands-onSentimentAnalysisonHotelsReviewsUsingArtificialIntelligenceandOpenAI’sChatGPT,withPython,作者:PieroPaialunga