我想知道是否可以使用我自己的标记化/分段文档(以及我自己的voab文件)作为create_pretraining_data.py
脚本(git source:https://github.com/google-research/bert)的输入文件。在
这个问题的主要原因是高棉语的切分/标记化与英语不同。在
Original:
វាមានមកជាមួយនូវ
Segmented/Tokenized:
វា មាន មក ជាមួយ នូវ
我自己尝试了一些方法,并在运行create_pretraining_data.py
和run_pretraining.py
脚本后获得了一些结果。然而,我不确定我所做的是否正确。在
我还想知道我应该用什么方法来验证我的模型。在
非常感谢任何帮助!在
我做的修改是:
1以列表格式生成输入文件我的输入文件不是普通的纯文本,而是来自我自定义的高棉语标记化输出,然后将其转换为列表格式,模仿运行示例英语文本时得到的输出。在
^{pr2}$*外括号表示源文件,第一个嵌套括号表示文档,第二个嵌套括号表示句子。与create_training_instances()
函数中的变量all_documents
完全相同的结构
我真的很怀疑这一点。为了创建vocab文件,我所做的就是从整个文档中找到唯一的标记。然后添加核心令牌需求[CLS], [SEP], [UNK] and [MASK]
。我不确定这样做是否正确。在
非常感谢您对这方面的反馈!在
三。跳过create_training_instances()函数中的标记化步骤由于我的输入文件已经与变量all_documents
匹配,所以我跳过第183行到第207行。我将其替换为按原样读取输入:
for input_file in input_files:
with tf.gfile.GFile(input_file, "r") as reader:
lines = reader.read()
all_documents = ast.literal_eval(lines)
原始输入文件(在自定义标记化之前)来自随机的web抓取。在
有关raw和vocab文件的一些信息:
Number of documents/articles: 5
Number of sentences: 78
Number of vocabs: 649 (including [CLS], [SEP] etc.)
下面是运行create_pretraining_data.py
后的输出(它的尾部)
这是我运行run_pretraining.py
后得到的结果
如上图所示,我从中得到的准确度很低,因此我担心我是否做得正确。在
首先,你的训练数据似乎很少(你提到的词汇量是649)。BERT是一个庞大的模型,需要大量的训练数据。谷歌发布的英文模型至少在整个维基百科上都有培训。想想看!在
BERT使用一种叫做wordpart的东西来保证固定的词汇量。很少的单词是这样分割的:
Jet makers feud over seat width with big orders at stake
翻译成单词:_J et _makers _fe ud _over _seat _width _with _big _orders _at _stake
。在WordPieceTokenizer.tokenize(text)
接受一个由空格预先指定的文本,因此您应该更改BasicTokenizer,它是由您的特定标记器在WordPieceTokenizer之前运行的,它应该按空格分隔标记。 要训练您自己的worwork Tookenizer,请看一下sentenePiece,它在bpe模式下与WordPiece基本相同。 然后,您可以从字块模型导出词汇表。在我自己并没有预先训练BERT模型,所以我无法帮助您准确地在代码中更改某些内容。在
相关问题 更多 >
编程相关推荐