我正在使用这段代码来获取数据集中句子的嵌入(我正在使用我的预训练模型)。python extract_features.py \ --input_file=/tmp/input.txt \ --output_file=/tmp/output.jsonl \ --vocab_file=$BERT_BASE_DIR/vocab.txt \ --bert_config_file=$BERT_BASE_DIR/bert_config.json \ --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \ --layers=-1,-2,-3,-4 \ --max_seq_length=128 \ --batch_size=32
但是,有一个问题:有没有更快的方法来获取嵌入?因为对于2000个句子,它花了6个小时。我的数据集包含20000个句子;60个小时对于Colab来说太长了。谢谢。
6条答案
按热度按时间ilmyapht1#
我有一个类似的问题。它需要太长时间了。@jacobdevlin-google 如果将层从
-1,-2,-3,-4
更改为仅-1
,是否会有帮助?这会影响输出向量的实用性吗?kulphzqa2#
你好,@abhikeshav。我找到了一个可能的解决方案。我将所有句子写入名为input.txt的文件中,然后运行上面的代码(我将layers参数更改为-1)。接下来,我使用以下代码从json文件中获取值:
import jsonlines df_emb=pd.DataFrame() with jsonlines.open('/content/tmp/output.jsonl') as f: for line in f.iter(): s=line['features'][0]['layers'][0]['values'] df_tmp=pd.DataFrame(s).T df_emb=df_emb.append(df_tmp,ignore_index=True)
然后,我将数据框'df_emb'保存到csv文件中。我发现这个方法比之前的要快。
vptzau2j3#
感谢@efabb95。您是否发现
-1
向量在计算中有用?uyhoqukh4#
你好,@abhikeshav。我还没有尝试,因为我需要将这些结果与其他结果结合起来,然后进行计算。我选择了-1,因为它是嵌入层的最后一层。
prdp8dxp5#
你好,@efabb95,你的输入文件有多大?我的大约是700MB,一旦达到RAM限制,脚本就会被杀死。
另外,你对-1向量已经有结果了吗?例如,计算两个句子的相似性是否有用?
oo7oh9g96#
你好,YannikHinteregger。我不记得我的输入文件的具体大小了。它是一个包含20000条记录和3列的文件,大约400兆字节。
我发现只选择最后几层(-1)对我来说很有用,因为我需要这些嵌入用于其他目的。我没有计算相似度。
也许你可以将你的输入分成几个部分。
使用这段代码,你应该不会触及RAM限制:
import jsonlines df_emb=pd.DataFrame() with jsonlines.open('/content/tmp/output.jsonl') as f: for line in f.iter(): s=line['features'][0]['layers'][0]['values'] df_tmp=pd.DataFrame(s).T df_emb=df_emb.append(df_tmp,ignore_index=True)
希望这对你有帮助。