前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >独家 | Scikit-LLM:Sklearn邂逅大语言模型

独家 | Scikit-LLM:Sklearn邂逅大语言模型

作者头像
数据派THU
发布2023-08-08 13:10:41
3750
发布2023-08-08 13:10:41
举报
文章被收录于专栏:数据派THU
作者:Fareed Khan翻译:陈之炎校对:赵茹萱 本文约2600字,建议阅读8分钟本文为您介绍文本分析的工具包Scikit-LLM。

标签:LLM

Scikit-LLM是文本分析的游戏规则改变者,它将功能强大的ChatGPT语言模型和scikit-learn相结合,为理解和分析文本提供了一个无与伦比的工具包。利用scikit-LLM,可以在各种类型的文本数据中发现隐含的模式、情绪和上下文,如客户反馈、社交媒体帖子和新闻文章等。它汇集了语言模型和scikit-learn的优势,能够从文本中提取有价值的见解。

官方GitHub存储库:

https://github.com/iryna-kondr/scikit-llm

全部示例均直接取自官方的存储库。

接下来,开启Scikit-LLM曼妙之旅吧!

安装Scikit-LLM

从安装Scikit-LLM开始,它集成了scikit-learn和语言模型功能强大的各种库,可以使用pip来安装它:

代码语言:javascript
复制
pip install scikit-llm

获取OpenAI API密钥

截至2023年5月,Scikit-LLM兼容一组特定的OpenAI模型,要求用户提供自己的OpenAI API密钥才能成功集成。

首先从Scikit-LLM库中导入SKLLMConfig模块,然后添加openAI密钥:

代码语言:javascript
复制
# importing SKLLMConfig to configure OpenAI API (key and Name)
from skllm.config import SKLLMConfig

# Set your OpenAI API key
SKLLMConfig.set_openai_key("<YOUR_KEY>")

# Set your OpenAI organization (optional)
SKLLMConfig.set_openai_org("<YOUR_ORGANIZATION>")

正如在GitHub存储库中所述:

如果是免费试用的OpenAI帐户,那么费率限制就不够了(每分钟3个请求)。请先切换到“随付”计划。 当调用SKLLMConfig.set_openai_org时,必须提供组织ID,而非组织名称。可以从以下链接中找到组织ID: https://platform.openai.com/account/org-settings

零样本GPT分类器

ChatGPT的闪酷之处是它在无需经过专门的训练的情况下,便能够实现文本分类,需要的只是描述性的标签。

在此引入ZeroShotGPTClassifier,它是Scikit-LLM中的一个类,利用它创建scikit-learn分类器。

代码语言:javascript
复制
# importing zeroshotgptclassifier module and classification dataset
from skllm import ZeroShotGPTClassifier
from skllm.datasets import get_classification_dataset

# get classification dataset from sklearn
X, y = get_classification_dataset()

# defining the model
clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")

# fitting the data
clf.fit(X, y)

# predicting the data
labels = clf.predict(X)

不仅如此,Scikit-LLM还确保它能收到包含一个有效标签的响应,如果没有收到包含一个有效标签的响应,Scikit-LLM将随机选择一个标签,并根据标签在训练数据中出现的频度来计算其概率。

简单地说,Scikit-LLM处理API的内容,并确保能获取到可用的标签。如果响应中缺少标签,它会根据训练数据中出现的频度选取一个填充标签。

如果没有带标记的数据怎么办?

更为有趣的是——甚至不需要有带标记的数据来训练模型,只需要提供一个候选标签的列表:

代码语言:javascript
复制
# importing zeroshotgptclassifier module and classification dataset
from skllm import ZeroShotGPTClassifier
from skllm.datasets import get_classification_dataset

# get classification dataset from sklearn for prediction only

X, _ = get_classification_dataset()

# defining the model
clf = ZeroShotGPTClassifier()

# Since no training so passing the labels only for prediction
clf.fit(None, ['positive', 'negative', 'neutral'])

# predicting the labels
labels = clf.predict(X)

太酷了吧?通过指定隐性标签,可以训练没有明确标记的数据。

正如在GitHub存储库中所述:

在零样本分类中,分类器的有效性取决于标签本身的结构,它可以用自然语言、描述性语言和自言自明来表达。 例如,在语义分类任务中,将标签从“<semantics>”转换为“the semantics of the provided text is <semantics>” (所提供文本的语义为语义)可能会更加有益。

多标签零样本文本分类

执行多标签零样本文本分类比想象得要更加容易:

代码语言:javascript
复制
# importing Multi-Label zeroshot module and classification dataset
from skllm import MultiLabelZeroShotGPTClassifier
from skllm.datasets import get_multilabel_classification_dataset

# get classification dataset from sklearn 
X, y = get_multilabel_classification_dataset()

# defining the model
clf = MultiLabelZeroShotGPTClassifier(max_labels=3)

# fitting the model
clf.fit(X, y)

# making predictions
labels = clf.predict(X)

多标签零样本文本分类的唯一区别是当创建MultiLabelZeroShotGPTClassifier类的实例时,需要指定分配给每个样本的最大标签数量(这里:max_labels=3)

如果没有标记好的数据(多标签示例)怎么办?

在上面的示例中,MultiLabelZeroShotGPTClassifier 用标记好的数据(X和y)进行训练。也可以通过提供候选标签列表来训练不带标记数据的分类器。在这种情况下,y的类型应该是List[List[str]]。

下面是一个不带标记数据的训练示例:

代码语言:javascript
复制
# getting classification dataset for prediction only
X, _ = get_multilabel_classification_dataset()

# Defining all the labels that needs to predicted
candidate_labels = [
    "Quality",
    "Price",
    "Delivery",
    "Service",
    "Product Variety"
]

# creating the model
clf = MultiLabelZeroShotGPTClassifier(max_labels=3)

# fitting the labels only
clf.fit(None, [candidate_labels])

# predicting the data
labels = clf.predict(X)

向量化文本

文本向量化是文本数字化的过程,使得计算机能够更容易地理解和分析它。此时,Scikit-LLM的 GPTVectorizer 模块能帮助转换一段文本,无论文本有多长,均将其转换为一个固定大小的数字集,称之为向量。

代码语言:javascript
复制
# Importing the GPTVectorizer class from the skllm.preprocessing module
from skllm.preprocessing import GPTVectorizer

# Creating an instance of the GPTVectorizer class and assigning it to the variable 'model'
model = GPTVectorizer()  

# transorming the
vectors = model.fit_transform(X)

将GPTVectorizer实例的fit_transform 方法应用于输入数据X,将模型拟合到数据,并将文本转换为固定维度的向量,然后将得到的向量分配给向量变量。

接下来演示在scikit-learn 管道中组合GPTVectorizer 和XGBoost Classifier的例子,这种方法可以有效地实现文本预处理和分类:

代码语言:javascript
复制
# Importing the necessary modules and classes
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import LabelEncoder
from xgboost import XGBClassifier

# Creating an instance of LabelEncoder class
le = LabelEncoder()

# Encoding the training labels 'y_train' using LabelEncoder
y_train_encoded = le.fit_transform(y_train)

# Encoding the test labels 'y_test' using LabelEncoder
y_test_encoded = le.transform(y_test)

# Defining the steps of the pipeline as a list of tuples
steps = [('GPT', GPTVectorizer()), ('Clf', XGBClassifier())]

# Creating a pipeline with the defined steps
clf = Pipeline(steps)

# Fitting the pipeline on the training data 'X_train' and the encoded training labels 'y_train_encoded'
clf.fit(X_train, y_train_encoded)

# Predicting the labels for the test data 'X_test' using the trained pipeline
yh = clf.predict(X_test)

文本摘要

GPT擅长总结文本,究其原因,是Scikit-LLM中有一个GPTSummarizer模块。可以通过两种方式使用它:单独使用它,或者作为在做其他事情之前的一个步骤(比如减少数据的大小,使用文本而非数字)来使用它:

代码语言:javascript
复制
# Importing the GPTSummarizer class from the skllm.preprocessing module
from skllm.preprocessing import GPTSummarizer

# Importing the get_summarization_dataset function
from skllm.datasets import get_summarization_dataset

# Calling the get_summarization_dataset function
X = get_summarization_dataset()

# Creating an instance of the GPTSummarizer
s = GPTSummarizer(openai_model='gpt-3.5-turbo', max_words=15)

# Applying the fit_transform method of the GPTSummarizer instance to the input data 'X'.
# It fits the model to the data and generates the summaries, which are assigned to the variable 'summaries'
summaries = s.fit_transform(X)

注意,max_words超参数对生成摘要中单词数量做了灵活的限制。除了提供提示之外,它并没有严格执行。这意味着,在某些情况下,所生成摘要中的实际单词数可能会略微超过指定的限制。简单地说,虽然max_words为摘要长度设置了一个粗略的目标,但根据输入文本的上下文和内容,偶尔可能会生成略长一点的摘要。

如果有任何疑问,请随时提问!

原文标题:Scikit-LLM: Sklearn Meets Large Language Models

原文链接:https://medium.com/@fareedkhandev/scikit-llm-sklearn-meets-large-language-models-11fc6f30e530

编辑:黄继彦

译者简介

陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

未经许可的转载以及改编者,我们将依法追究其法律责任。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装Scikit-LLM
  • 获取OpenAI API密钥
  • 零样本GPT分类器
  • 如果没有带标记的数据怎么办?
  • 多标签零样本文本分类
  • 如果没有标记好的数据(多标签示例)怎么办?
  • 向量化文本
  • 文本摘要
  • 如果有任何疑问,请随时提问!
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档