机器学习|使用Bert获得句向量,用于下游任务

处理文本分类任务时,除了语义信息可能还可以使用一些其他结构化特征(如语料来源,说话人信息等等)。此时可以使用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)

    推荐阅读