处理文本分类任务时,除了语义信息可能还可以使用一些其他结构化特征(如语料来源,说话人信息等等)。此时可以使用Bert获取原始语料的句向量,再结合已知的结构化特征,训练适用于下游任务的分类器。
1. 微调Bert预训练模型 见 https://blog.csdn.net/u011340759/article/details/106331620
2. 使用Bert特征抓取接口 【机器学习|使用Bert获得句向量,用于下游任务】extract_features.py
改写自己的样本输入函数
def read_examples(input_file):
"""Read a list of `InputExample`s from an input file."""
examples = []
unique_id = 0
tmp = pd.read_csv(input_file,sep='\t')
for index, row in tmp.iterrows():
m = re.match(r"^(.*) \|\|\| (.*)$", row[0])
if m is None:
text_a = row[0]
else:
text_a = m.group(1)
examples.append(
InputExample(unique_id=unique_id, text_a=text_a, text_b=None))
unique_id += 1
return examples
3. 传入需要的flag参数并获得结果(.jsonl)
#!/bin/bashexport CURRENT_PATH=$(cd "$(dirname "$0")";
pwd)
export BERT_BASE_DIR=$CURRENT_PATH/YOUR_MODEL_PATH
export MY_DATASET=$CURRENT_PATH/YOUR_DATA_PATHpython extract_features.py \
--input_file=$MY_DATASET/test.csv \
--output_file=$CURRENT_PATH/YOUR_OUTPUT_PATH/test.jsonl \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/model.ckpt \
--layers=-2 \ # -2表示使用倒数第二层权重(优于使用最后一层-1)
--max_seq_length=64 \
--batch_size=8 \
--do_lower_case=false # 多语言模型时
4. 读取.jsonl并转换为DataFrame
def read_jsonl(path):
with open(path,'r') as load_f:
json_list=list(load_f)
data = https://www.it610.com/article/[]
for json_str in json_list:
result = json.loads(json_str)['features'][0]['layers'][0]['values']
data.append(result)
return pd.DataFrame(data)
推荐阅读
- paddle|动手从头实现LSTM
- 人工智能|干货!人体姿态估计与运动预测
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- 读书笔记|《白话大数据和机器学习》学习笔记1
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 深度学习|深度学习笔记总结
- 机器学习|机器学习Sklearn学习总结
- 机器学习|线性回归原理与python实现