Press "Enter" to skip to content

基于 Tensorflow.js 在浏览器中使用 BERT

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

背景

 

目前,有很多令人激动的关于“BERT”的研究。那幺,如果将 BERT 用于用户更容易触达的地方——Web浏览器,会怎幺样呢?

 

在网上问 Google 问题很容易:“自由女神有多高?”并得到答案(93米)。但是,目前为止,没有简单的方法可以用自然语言询问特定内容(例如新闻文章,研究论文或博客文章)。您或许会使用浏览器的页内搜索功能(CTRL + F),但是将依赖于直接的单词匹配。如果可以输入问题来替代单词,并且在页面上高亮答案,会不会更赞?

 

Chrome 插件

 

为了验证这个想法,我们使用 MobileBERT问答模型 和 Tensorflow.js 开发了一个 Chrome 扩展程序,可以让用户在任意网页上提问,并返回基于网页内容的答案。该模型运行在浏览器中,因此不会将任何数据发送到服务器,并且可以维护隐私。

 

虽然现在还处于早期实验阶段,但在本博客中,我们还是想分享一下模型的效果,并介绍如何使用开源 TensorFlow.js BERT模型 构建这样的应用程序。在我们分享的例子中,有的效果非常不错,但也有不太准的。这些例子可以帮助我们了解模型的潜力和限制。我们希望大家都可以参与讨论,并就“机器学习在语言上的应用”这个话题发表观点。

tfjs-bert.gif

询问相关问题,获得答案

 

实验结果

 

以下是一些效果不错的例子:

有关螃蟹的文章 -问题:“它们如何移动?”:“螃蟹通常侧身行走”。
前照灯产品页面 —问题:“会被弄湿吗?”答案:“浸入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 团队。我们很期待您做的成果!

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注