本文是 TensorFlow 博客上的文章“ Exploring helpful uses for BERT in your browser with Tensorflow.js ”的翻译和补充。发布者:Philip Bayer(创意技术人员),Ping Yu(软件工程师),Jason Mayes(开发人员倡导者)
背景
目前,有很多令人激动的关于“BERT”的研究。那么,如果将 BERT 用于用户更容易触达的地方——Web浏览器,会怎么样呢?
在网上问 Google 问题很容易:“自由女神有多高?”并得到答案(93米)。但是,目前为止,没有简单的方法可以用自然语言询问特定内容(例如新闻文章,研究论文或博客文章)。您或许会使用浏览器的页内搜索功能(CTRL + F),但是将依赖于直接的单词匹配。如果可以输入问题来替代单词,并且在页面上高亮答案,会不会更赞?
Chrome 插件
为了验证这个想法,我们使用 MobileBERT问答模型 和 Tensorflow.js 开发了一个 Chrome 扩展程序,可以让用户在任意网页上提问,并返回基于网页内容的答案。该模型运行在浏览器中,因此不会将任何数据发送到服务器,并且可以维护隐私。
虽然现在还处于早期实验阶段,但在本博客中,我们还是想分享一下模型的效果,并介绍如何使用开源 TensorFlow.js BERT模型 构建这样的应用程序。在我们分享的例子中,有的效果非常不错,但也有不太准的。这些例子可以帮助我们了解模型的潜力和限制。我们希望大家都可以参与讨论,并就“机器学习在语言上的应用”这个话题发表观点。

询问相关问题,获得答案
实验结果
以下是一些效果不错的例子:
- 有关螃蟹的文章 -问题:“它们如何移动?”答案:“螃蟹通常侧身行走”。
- 前照灯产品页面 —问题:“会被弄湿吗?”答案:“浸入1m的水中最多30分钟”。
- 汽车评论 —问题:“汽油里程”答案:“城市中每加仑汽油19英里”。
- 关于木制建筑的文章:—问题:“它有多高”答案:“高度280英尺”。
- Lazania 食谱 -问题:“烤箱要放多久”答案:“ 25分钟”。
以下是不太符合预期的例子:
- 产品页面 —当被问及“水罐是由什么制成的?”时,答案不是“不含BPA的聚碳酸酯水罐”,而是“以交错间隔的脉冲,在几秒钟内均匀地压碎一壶冰”。
- 这篇文章 —当被问到“鲨鱼是真的吗?”时,将返回文本“ sharks!Sharks”。但是,当我问相关问题“鲨鱼是如何工作的?”时,我得到了一个稍微有用的答案:“机械鲨鱼经常出故障”。
机器学习模型如何工作?
通过 MobileBERT 问答模型,您可以构建一个系统,以自然语言回答用户的问题。该模型是使用预先训练的BERT 模型创建的,该模型已经用 SQuAD 1.1(斯坦福问答数据集)进行了微调。这是一种预训练语言表达的新技术,可在各种自然语言处理(NLP)任务中获得最好的效果。我们很高兴地宣布,该模型现已在 TensorFlow.js 中供您自己使用。MobileBERT 模型是一种经过压缩的 BERT,可以部署在性能不高的机器上(比如手机)。 该模型将文档和问题作为输入,并返回文档中最可能是问题答案的句子。由于我们使用 TensorFlow.js,因此所有处理都在 Web 浏览器中完成。这意味着隐私得到保护,并且所分析网站的文本永远不会发送到服务器进行分类。
TensorFlow.js BERT API
该模型非常易于使用。请参见下面的代码段。
<!-- Load TensorFlow.js. This is required to use the qna model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"> </script>
<!-- Load the qna model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/qna"> </script>
<!-- Place your code in the script tag below. You can also use an external .js file -->
<script>
// Notice there is no 'import' statement. 'qna' and 'tf' is
// available on the index-page because of the script tag above.
// Load the model.
qna.load().then(model => {
model.findAnswers(question, passage).then(answers => {
console.log('Answers: ', answers);
});
});
</script>
首先,我们加载了 TensorFlow.js 库和 Q&A(问答)模型,并进行了 Q&A 搜索(findAnswers)。模型会被保留在内存中,所以只需要加载一次就够了,后面可以根据需要,多次调用 findAnswers 方法。findAnswers 方法接受两个字符串作为参数。第一个是您要提出的问题,第二个是您要搜索的文本(例如页面上的文本)。这将返回具有以下结构的
[
{
text: string,
score: number,
startIndex: number,
endIndex: number
}
]
您将获得一个对象数组,里面是一些最能回答您问题的句子及其准确度得分。另外,您可以获得答案文本的索引,以便找到答案文本在文档中的位置。这就是全部内容了!有了这些,您就可以高亮文档中的答案了,或者实现其他有趣的想法。
喜大普奔!MobileBERT Q&A 模型现已开源。如果您想展示你用 TFJS 做的事情,请在社交媒体上使用**#MadeWithTFJS** 通知 TensorFlow.js 团队。我们很期待您做的成果!