我有一个带有单词嵌入的文件(将单词嵌入定义为单词的向量表示形式),格式如下:
a | [0.23, 0.04, ..., -0.22]
aaron | [0.21, 0.08, ..., -0.41]
... | ...
zebra | [0.97, 0.01, ..., -0.34]
该文件约为2.5 GB。我也有很多想转换为向量的句子,例如:
Yes sir, today is a great day.
Would you want to buy that blue shirt?
...
Is there anything else I can help you with?
我的句子嵌入策略目前很简单:
For each sentence:
For each word:
Obtain the vector representation of the word using the word embedding file.
End
Calculate the average of the word vectors of the sentence.
End
我发现由于要嵌入大量的句子,因此可以使用Spark来完成此任务;将单词嵌入作为文件存储在HDFS中,并使用Spark SQL从Hive表中查询句子,但是由于每个节点可能都需要访问整个单词嵌入文件,这意味着在每个节点中收集整个单词嵌入RDD节点之间的通信非常昂贵。
任何人都对如何有效解决此问题有任何想法?如果问题尚不清楚,或者您认为我对Spark的工作方式有误解,也请告诉我。我仍在学习,非常感谢您的帮助!
提前致谢。
首先,对于您而言,您word
是一成不变的,并且担心网络效率。我认为您可以word
设置广播参数,因此word
将其存储在本地的每个节点中,而您只传输了word
一次(总共N次,N是执行者的数量)。然后,如果您要同时嵌入word
和句子,这意味着必须进行网络传输,则最好在最终聚合之前进行本地归约。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句