文本分类项目

4种实现方式的区别:
	1- 随机森林
		机器学习的方式。代码开发、模型训练等非常简单;因为模型比较简单,所以预测准确率一般般
		工作中拿到需求以后,短时间内想要快速看到效果,用该方式
		
	2- Fasttext
		它实际就是个简单的深度学习网络模型,内部结构:输入层、一层隐藏层、输出层。
		工作中拿到需求以后,短时间内想要快速看到效果,而且想以深度学习的方式实现,用该方式
		
	3- Bert
		Bert的网络结构、参数量比上面的两种都要复杂。也就是代码开发量、训练耗时等都要复杂一些,
        但是能够进行非常丰富的模型调优。
		如果想要达到比较高的准确率,同时开发时间比较充裕,就用该方式
		
	4- LLM大模型
		如果只想通过写提示词的方式快速实现

随机森林模型

from sklearn.feature_extraction.text import TfidfVectorizer # TF-IDF类
from sklearn.ensemble import RandomForestClassifier # 随机森林

# 3- 特征数据转词向量
# 3.1- 创建TF-IDF算法模型实例对象
tfidf = TfidfVectorizer(stop_words=stop_word_list)

# 5- 创建模型
model = RandomForestClassifier(n_jobs=-1)
# 模型训练
model.fit(x_train,y_train)

为什么用TF-IDF?

单个特征做阈值切分”就是:决策树在每个节点上,只挑出一个特征(比如一个词),问一个“是/否”问题(比如该词的权重 > 0.3 吗?),然后据此把样本分到左右两支。

Fasttext模型

文本文件中的每一行对应一个文档;
文档的类别标签以 __label__name 为前缀放在文档的最前面;

# autotuneValidationFile 参数(指定验证集)决定启用自动调优,
# autotuneDuration 控制调优时长。
model = fasttext.train_supervised(
    input=config.process_char_train_datapath,
    autotuneValidationFile=config.process_char_dev_datapath,
    autotuneDuration=3*60,
    seed=115,
    verbose=3
    )

Bert模型

# 2- 搭建网络结构
# 2.1- 先定义Bert模型
self.bert_model = BertModel.from_pretrained(config.bert_path)

# 2.2- 再定义我们自己的网络结构
in_features = BertConfig.from_pretrained(config.bert_path).hidden_size
self.linear = nn.Linear(in_features=in_features,out_features=config.classname_len)

详细文章:Bert模型

LLM大模型


# 2- 创建LLM的客户端
llm_client = OpenAI(
    api_key=os.getenv("QWEN_API_KEY"),
    base_url=os.getenv("QWEN_BASE_URL")
)

system_prompt = """
你是一个专业的新闻分类器。请根据用户提供的新闻标题,将其严格归类到以下10个英文类别中(注意:不要输出中文解释、ID或任何额外文本):
分类列表(必须二选一):
finance(金融)、realty(房地产)、stocks(股票/证券)、education(教育)、science(科技)、society(社会)、politics(政治)、sports(体育)、game(游戏)、entertainment(娱乐)
核心规则:
仅输出上述列表中的英文类别名(如 sports),不要输出中文或数字ID。
分类依据必须完全基于标题内容,无需引入外部知识。
严格拒绝输出任何解释、格式说明或多余文本。
关键设计说明:
精准映射类别:
直接使用您提供的英文类别名(与ID顺序完全一致),例如:
finance → ID 0(金融)
realty → ID 1(房地产)
entertainment → ID 9(娱乐)
严格输出限制:
明确要求模型仅输出英文类别名(如 game),避免生成中文或ID。
通过“不要输出中文或数字ID”强化指令,防止模型混淆。
适配中文标题:
支持中文新闻标题的语义分析(如“钢材期货”“海棠公社”),同时兼容特殊符号(如“徐若”)。
分类依据仅依赖标题内容,不依赖外部信息。
大模型优化:
语言简洁(仅3条规则),符合LLM的prompt工程最佳实践,避免冗长导致指令失效。
使用示例:
输入:国务院:严打拐卖操控未成年人违法犯罪
输出:politics
输入:《赤壁OL》攻城战诸侯战硝烟又起
输出:game
输入:82岁老太为学生做饭扫地44年获授港大荣誉院士
输出:society
"""