主要特性
- 适用于内存受限的CPU执行: 使用高效的蒸馏模型(如
deepset/tinyroberta-6l-768d
)生成嵌入。 - 逻辑回归和最近中心点分类: 通过使用LLM嵌入,利用逻辑回归或基于余弦相似度的最近中心点方法高效地对文本进行分类,无需微调。
- 高效并行执行: 通过共享相同的嵌入生成模型,以最小的开销同时运行数百个分类器。
安装
pip install -U fastc
训练模型
只需几行代码即可训练文本分类器:
from fastc import Fastc
tuples = [
("我刚刚得到晋升!感觉太棒了。", '积极'),
("今天糟糕透了。我丢了钱包还错过了公交车。", '消极'),
("我和朋友在派对上玩得很开心。", '积极'),
("今早的交通堵塞让我非常沮丧。", '消极'),
("我的假期非常美好和放松。", '积极'),
("昨晚因为噪音我一夜未眠。", '消极'),
("我对今晚的音乐会非常兴奋!", '积极'),
("我对餐厅的服务感到失望。", '消极'),
("天气很好,我很享受散步。", '积极'),
("我过了糟糕的一天。什么都不顺利。", '消极'),
("我很高兴地宣布我们即将迎来一个宝宝!", '积极'),
("今天我感到非常孤独和悲伤。", '消极'),
("我的团队赢得了冠军!我们是冠军。", '积极'),
("我再也受不了我的工作了,太有压力了。", '消极'),
("我喜欢在假期与家人共度时光。", '积极'),
("我的电脑崩溃了,所有的工作都丢失了。", '消极'),
("我为今年的成就感到自豪。", '积极'),
("我对所有事情感到疲惫和不知所措。", '积极'),
]
分类核心
最近中心点
model = Fastc(
embeddings_model='microsoft/deberta-base',
kernel=Kernels.NEAREST_CENTROID,
)
model.load_dataset(tuples)
model.train()
逻辑回归
from fastc import Kernels
model = Fastc(
embeddings_model='microsoft/deberta-base',
kernel=Kernels.LOGISTIC_REGRESSION,
# cross_validation_splits=5,
# cross_validation_repeats=3,
# iterations=100,
# parameters={...},
# seed=1984,
)
model.load_dataset(tuples)
model.train()
池化策略
已实现的池化策略包括:
MEAN
(默认)MEAN_MASKED
MAX
MAX_MASKED
CLS
SUM
ATTENTION_WEIGHTED
from fastc import Pooling
model = Fastc(
embeddings_model='microsoft/deberta-base',
pooling=Pooling.MEAN_MASKED,
)
model.load_dataset(tuples)
model.train()
模板和指令模型
您可以将指令模板与指令模型(如intfloat/multilingual-e5-large-instruct
)一起使用。其他模型即使没有明确地使用模板进行训练,使用模板也可能会提高性能。
from fastc import ModelTemplates, Fastc, Template
# template_text = '指令:{instruction}\n查询:{text}'
template_text = ModelTemplates.E5_INSTRUCT
model = Fastc(
embeddings_model='intfloat/multilingual-e5-large-instruct',
template=Template(
template_text,
instruction='将文本分类为积极或消极'
),
)
保存、加载和导出模型
训练后,您可以保存模型以供将来使用:
model.save_model('./sentiment-classifier/')
将模型发布到HuggingFace
[!重要]
首先使用huggingface-cli login
登录HuggingFace
model.push_to_hub(
'braindao/sentiment-classifier',
tags=['sentiment-analysis'],
languages=['multilingual'],
private=False,
)
加载现有模型
您可以从目录或HuggingFace加载预训练模型:
# 从目录加载
model = Fastc('./sentiment-classifier/')
# 从HuggingFace加载
model = Fastc('braindao/sentiment-classifier')
类别预测
sentences = [
'我感觉很好。',
'我很痛苦。',
]
# 单个预测
scores = model.predict_one(sentences[0])
print(scores['label'])
# 批量预测
scores_list = model.predict(sentences)
for scores in scores_list:
print(scores['label'])
推理服务器
要启动Docker化的推理服务器,请使用以下脚本:
./server/scripts/start-docker.sh
或者,在主机上:
./server/scripts/start-server.sh
在这两种情况下,都会提供一个HTTP API,监听fastc-server
hashport 53256
。
推理
要对文本进行分类,使用POST /
并提供JSON负载,例如:
{
"model": "braindao/tinyroberta-6l-768d-language-identifier-en-es-ko-zh-fastc-lr",
"text": "오늘 저녁에 친구들과 함께 pizza를 먹을 거예요."
}
响应:
{
"label": "ko",
"scores": {
"en": 1.0146501463135055e-08,
"es": 6.806091549848057e-09,
"ko": 0.9999852640487916,
"zh": 1.471899861513275e-05
}
}
版本
要检查fastc
版本,使用GET /version
:
响应:
{
"version": "2.2407.0"
}