734. Sentence Similarity

2024-06-20 05:48
文章标签 similarity sentence 734

本文主要是介绍734. Sentence Similarity,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Given two sentences words1, words2 (each represented as an array of strings), and a list of similar word pairs pairs, determine if two sentences are similar.

For example, “great acting skills” and “fine drama talent” are similar, if the similar word pairs are pairs = [[“great”, “fine”], [“acting”,”drama”], [“skills”,”talent”]].

Note that the similarity relation is not transitive. For example, if “great” and “fine” are similar, and “fine” and “good” are similar, “great” and “good” are not necessarily similar.

However, similarity is symmetric. For example, “great” and “fine” being similar is the same as “fine” and “great” being similar.

Also, a word is always similar with itself. For example, the sentences words1 = [“great”], words2 = [“great”], pairs = [] are similar, even though there are no specified similar word pairs.

Finally, sentences can only be similar if they have the same number of words. So a sentence like words1 = [“great”] can never be similar to words2 = [“doubleplus”,”good”].

这一题简单来说就是用hash table把现有的字典存储起来,然后逐一扫描验证就行。
hash table的key都是unique的,那么如何处理同一个word对应多个近义词就是这题的关键。提供两种解法,分别基于unordered_map和unordered_set.

方法一:unordered_map
用一个key对应一个vector< string>,将所有的近义词存起来就是了。

class Solution {
public:bool areSentencesSimilar(vector<string>& words1, vector<string>& words2, vector<pair<string, string>> pairs) {int len = words1.size();if (len != words2.size()) return false;unordered_map<string, vector<string>> hash;for (auto p : pairs) {hash[p.first].push_back(p.second);}for (int i = 0; i < len; i++) {if (words1[i] == words2[i]) continue;if (hash.find(words1[i]) != hash.end()) {int flag = false;for (auto s : hash[words1[i]]) {if (words2[i] == s) {flag = true;break;}}if (flag == true) continue;}if (hash.find(words2[i]) != hash.end()) {int flag = false;for (auto s : hash[words2[i]]) {if (words1[i] == s) {flag = true;break;}}if (flag == true) continue;}return false;}return true;}
};

方法二: unordered_set
将一对近义词用特殊符合连成一个字符串存起来。

class Solution {
public:bool areSentencesSimilar(vector<string>& words1, vector<string>& words2, vector<pair<string, string>> pairs) {int len = words1.size();if (len != words2.size()) return false;unordered_set<string> hash;for (auto p : pairs) {hash.insert(p.first + "#" + p.second);}for (int i = 0; i < len; i++) {if (words1[i] == words2[i]) continue;if (hash.find(words1[i] + "#" + words2[i]) != hash.end()) continue; if (hash.find(words2[i] + "#" + words1[i]) != hash.end()) continue;return false;}return true;}
};

这里提一下这种container里常见的insert,emplace以及operator[]的区别。
首先[]和insert是一直都有的。[]是find or add,如果本来就有那个key, 直接返回对应的reference,如果没有,创建一个,作default初始化。insert是如果有,不作为,如果没有,copy or move 来创建一个。
emplace是c++11标准中新加的,跟insert很像,如果有,不作为,不会overload。但是一些时候,emplace 会更加高效,简单来说,因为它在创建一个新的element的时候是in place的,没有copy or move 的操作,通过传递参数完成构建,实际上是dynamic memory allocation。

这篇关于734. Sentence Similarity的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077272

相关文章

Convolutional Neural Networks for Sentence Classification论文解读

基本信息 作者Yoon Kimdoi发表时间2014期刊EMNLP网址https://doi.org/10.48550/arXiv.1408.5882 研究背景 1. What’s known 既往研究已证实 CV领域著名的CNN。 2. What’s new 创新点 将CNN应用于NLP,打破了传统NLP任务主要依赖循环神经网络(RNN)及其变体的局面。 用预训练的词向量(如word2v

Sentence-BERT实现文本匹配【对比损失函数】

引言 还是基于Sentence-BERT架构,或者说Bi-Encoder架构,但是本文使用的是参考2中提出的对比损失函数。 架构 如上图,计算两个句嵌入 u \pmb u u和 v \pmb v v​之间的距离(1-余弦相似度),然后使用参考2中提出的对比损失函数作为目标函数: L = y × 1 2 ( distance ( u , v ) ) 2 + ( 1 − y ) × 1 2

[论文笔记]Circle Loss: A Unified Perspective of Pair Similarity Optimization

引言 为了理解CoSENT的loss,今天来读一下Circle Loss: A Unified Perspective of Pair Similarity Optimization。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 这篇论文从对深度特征学习的成对相似度优化角度出发,旨在最大化同类之间的相似度 s p s_p s

NLP-文本匹配-2016:SiamseNet【Learning text similarity with siamese recurrent networks】

NLP-文本匹配-2016:SiamseNet【Learning text similarity with siamese recurrent networks】

论文笔记:GEO-BLEU: Similarity Measure for Geospatial Sequences

22 sigspatial 1 intro 提出了一种空间轨迹相似性度量的方法比较了两种传统相似度度量的不足 DTW 基本特征是它完全对齐序列以进行测量,而不考虑它们之间共享的局部特征这适用于完全对齐的序列,但不适用于逐步对齐没有太多意义的序列BLEU 适用于不完全对齐的序列将序列中的地点视为单词,它们的连续组合视为地理空间𝑛-gram,应用这种方法基于局部特征评估地理空间轨迹的相似性然而,

Similarity-Preserving Knowledge Distillation

Motivation 下图可以发现,语义相似的输入会产生相似的激活。这个非常好理解,这个C维的特征向量可以代表该输入的信息 因此本文根据该观察提出了一个新的蒸馏loss,即一对输入送到teacher中产生的特征向量很相似,那么送到student中产生的特征向量也应该很相似,反义不相似的话同样在student也应该不相似。 该loss被称为Similarity-preserving,这样stu

737. Sentence Similarity II

Given two sentences words1, words2 (each represented as an array of strings), and a list of similar word pairs pairs, determine if two sentences are similar. For example, words1 = [“great”, “acting”,

gensim similarity计算文档相似度

向量空间模型计算文档集合相似性。[0] 将原始输入的词转换为ID,词的id表示法简单易用,但是无法预测未登记词,难以挖掘词关系;词汇鸿沟[1]:任意两个词之间是独立的,无法通过词的ID来判断词语之间的关系,无法通过词的id判断词语之间的关系[2] 使用gensim包的models,corpora,similarities,对文档进行相似度计算,结果比较其他lda、doc2vec方法稳定。 主

Hdu 1998Nyoj 734 奇数阶魔方

题目链接:点击打开链接 据说这是组合数学中的一道例题。 题目意思很简单,一开始,没看出来,什么意思。以为是一道找规律题。 其实就是一模拟题,从1---n^2,一直向右上方填数就好。 两个问题: 1.越界问题。 2.已填数这么办?填入该填数的前一个的下方。 代码: #include <cstdio>#include <cstring>#include <algorithm>

论文阅读:《Convolutional Neural Networks for Sentence Classification》

重磅专栏推荐: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经验分享,旨在帮助读者更好地理解和应用这些领域的最新进展 论文地址:http://xueshu