Math.ru
Юлий Анатольевич Шрейдер
М.: Наука, 1971. 256 с.
Тираж 100000 экз.
|
В книге рассказывается о том, как можно формально описать свойства хорошо знакомых всем отношений, указанных в заглавии.
На этом примере выясняется, как происходит переход от привычных, но неточных понятий к строгим математическим определениям.
Необходимость строгого описания простейших отношений возникает в математической логике, кибернетике, математической лингвистике и т.п.
Простейшими примерам из математической лингвистики посвящена последняя глава книги.
Содержание
Предисловие.
Введение.
Глава I. Отношения.
§ 1. Как задается отношение.
§ 2. Функции как отношения.
§ 3. Операции над отношениями.
§ 4. Алгебраические свойства операций.
§ 5. Свойства отношений.
§ 6. Инвариантность свойств отношений.
Глава II. Одинаковость и эквивалентность.
§ 1.0т одинаковости к эквивалентности.
§ 2. Формальные свойства эквивалентности.
§ 3. Операции над эквивалентпостями.
§ 4. Отношения эквивалентности на числовой прямой.
Глава III. Сходство и толерантность.
§ 1. От сходства к толерантности.
§ 2. Операции над толерантностями.
§ 3. Классы толерантности.
§ 4. Дальнейшее исследование структуры
толерантностей.
Глава IV. Упорядоченность.
§ 1. Что такое порядок?
§ 2. Операции над отношениями порядка.
§ 3. Древесные порядки.
§ 4. Множества с несколькими порядками.
Глава V. Отношения в школьной математике.
§ 2. Отношения между уравнениями.
Глава VI. Отображения отношений.
§ 1. Гомоморфизмы и корреспонденции.
§ 2. Минимальный образ и каноническое пополнение
отношения.
Глава VII. Примеры из математической лингвистики.
§ 1. Синтаксические структуры.
§ 2. Общее понятие текста.
§ 3. Модели сочетаемости.
§ 4. Формальная задача теории дешифровки.
§ 5. О дистрибуциях.
Приложения.
1. Сводка основных типов отношений и их свойств.
2. Первоначальные сведения о множествах.
3. Что такое модель?
Алфавитный указатель.
Указатель символов.
|
Постоянный адрес этой страницы: http://math.ru/lib/268
Снижаем размерность эмбеддингов предложений для задачи определения семантического сходства / Хабр
Привет, Хабр!
Меня зовут Николай Шукан, я Data Scientist и участник профессионального сообщества NTA. Сегодня речь пойдет о методах снижения размерности эмбеддингов для задач определения семантического сходства предложений.
Для чего это необходимо? С каждым годом растет сложность моделей, решающих вопросы семантически‑ и контекстно‑ориентированной обработки естественного языка (NLP). Также нельзя забывать и про проблемы мультиязычности моделей. Все это сильно сказывается на увеличении их размеров и системных требований к железу для их обучения, дообучения, да и просто запуска. Задачи NLP сегодня — это прикладные задачи, их хочется решать на доступном оборудовании и за разумное время.
А если поконкретней? Перед мной стояла задача найти и обобщить текстовые данные, представляющие собой массив предложений. Я точно знал, что среди них есть семантически схожие фразы. Однако прямой подход для определения семантического сходства наборов фраз требовал много памяти и времени. Чтобы решить эту проблему, я попытался уменьшить размерность векторов признаков предложений, но как понять, когда остановиться и что это даст?
Ну и как понять? В рамках данного поста посмотрим, как меняется оценка семантического сходства от изменения размерностей эмбеддингов разными классическими методами их уменьшения.
Навигация по постуВведение
В объятиях Hugging Face
Разберёмся с датасетом
Начинаем снижение
Итог
Введение
Мера степени семантического сходства между парами предложений — любопытный аспект NLP. Отлично справляется с группировкой схожих по смыслу предложений и предикатов, выискивает повторы, убрав которые можно снизить нагруженность модели, которая будет обрабатывать наши текстовые данные.
Для решения задачи семантического сходства между предложениями нужно преобразовать их в вектор. Для этого воспользуемся эмбеддингом: на вход подается набор предложений (в нашем случае — два для попарного сравнения), а на выходе преобразуется в числовые векторы этих предложений. Собственно, под эмбеддингом будем понимать результат преобразования текстовой сущности в числовой вектор. Модель преобразования выглядит так:
На сегодня самый простой и эффективный способ создания контекстуализированных эмбеддингов — использовать трансформер, модель машинного обучения, отлично зарекомендовавшую себя в сфере NLP.
Архитектурно трансформеры схожи с RNN (система кодировщик‑декодировщик). Кроме того, они также предназначены для обработки последовательностей. Архитектура трансформера выглядит следующим образом:
Источник
В отличие от RNN трансформеры не требуют обработки последовательностей по порядку: если входные данные это текст, то трансформеру не требуется обрабатывать конец текста после обработки его начала. Благодаря этому трансформеры распараллеливаются легче чем RNN и оттого выигрывают в скорости обучения. Также важной особенностью данной архитектуры является механизм внимания — он фокусируется на важных с точки зрения контекста словах и отдает их напрямую в обработку. Благодаря этому трансформеры обладают хорошей долгосрочной памятью и лучшим умением учитывать контекст.
Все это делает трансформеры выбором номер один для решения нашей задачи семантического сходства.
Таким образом, получим следующую модель определения семантического сходства:
Функция метрики будет заключаться в определении близости полученных векторов. Для этого можно использовать разные инструменты, мы остановимся на косинусном сходстве:
где A и B — n‑мерные вектора, θ — угол между ними, A∙B — скалярное произведение векторов A и B, ||A|| и ||B|| — длины векторов в евклидовом пространстве, Ai и Bi — i‑ые компоненты векторов A и B соответственно.
Для уменьшения количества признаков предложений, воспользуемся классическими методами снижения размерностей. Цель — уменьшить количество слабо информативных признаков для облегчения модели, но не потерять в качестве информации, т. е. получить значение семантического сходства как минимум не значительно хуже, чем до уменьшения размерности.
Схема снижения размерности будет выглядеть следующим образом:
Полученные эмбеддинги пониженной размерности также отправляются на вход в функцию метрики, где уже вычисляется семантическое сходство.
Приступим к реализации описанной схемы.
В объятиях Hugging Face
Для подбора датасета и создания модели семантического сходства я обратился к замечательной платформе Hugging Face.
STSb Multi MT — это набор мультиязычных переводов и англоязычный оригинал классического STSbenchmark. Датасет состоит из трех колонок: первое предложение, второе предложение и метрика их схожести от 0 до 5 (далее — эталонная оценка). Датасет разбит на 3 части — train, test и dev. Так как в рамках поста вопросы точной донастройки рассматриваться не будет, то ограничимся dev сплитом в 1,5 тыс.
# загрузим датасет df_dev = load_dataset("stsb_multi_mt", name="ru", split="dev")
Первые пять строк датасета:
sentence1 | sentence2 | similarity_score |
«Человек в твердой шляпе танцует.» | «Мужчина в твердой шляпе танцует.» | 5 |
«Маленький ребенок едет верхом на лошади.» | «Ребенок едет на лошади.» | 4.75 |
«Мужчина кормит мышь змее.» | «Человек кормит змею мышью.» | 5 |
«Женщина играет на гитаре.» | «Человек играет на гитаре.» | 2.4 |
«Женщина играет на флейте. « | «Человек играет на флейте.» | 2.75 |
Среди моделей мой выбор пал на distiluse‑base‑multilingual‑cased‑v1 из семейства sentence‑transformers.
Архитектура модели выглядит следующим образом:
На вход в модель подается предложение. Оно проходит через слой трансформера (DistilBertModel) и преобразуется в эмбеддинг, который через слой пулинга попадает на полносвязный слой Dense с вектором смещения (bias) и тангенсальной активационной функцией. На выходе получаем эмбеддинг с размерностью 512.
Данная модель отображает предложения в 512-мерное векторное пространство.
# загрузим модель model = SentenceTransformer("distiluse-base-multilingual-cased-v1")
Разберёмся с датасетом
Обработаем наш датасет. Для чего нормализуем эталонную оценку, приведя ее к значениям от 0 до 1. Из модели вытащим эмбеддинги и рассчитаем косинусное сходство, которое и послужит основой для сравнения с целевой метрикой датасета и измененной метрикой после снижения размерности.
res = [] F = True for df in df_dev: score = float(df['similarity_score'])/5.0 # нормализация эталонной оценки embeddings = model.encode([df['sentence1'], df['sentence2']]) semantic_sim = 1 - cosine(embeddings[0], embeddings[1]) # косинусное сходство между парами предложений res.append([df['sentence1'], df['sentence2'], score, semantic_sim]) if F == True: mas_embed = embeddings F = False else: mas_embed = np.concatenate((mas_embed, embeddings), axis=0) Соберем все в единый датафрейм: df = pd.DataFrame(res, columns=['senetence1', 'sentence2', 'score', 'semantic_sim'])
Начинаем снижение
Теперь можем приступить к применению методов снижения размерности.
Я выбрал четыре метода доступных в модуле scikit‑learn.decomposition — Матричная декомпозиция:
PCA — Метод главных компонент.
FastICA — Быстрый алгоритм для Анализа независимых компонент.
Factor Analysis (FA) — Факторный анализ.
TruncatedSVD — Усеченное сингулярное разложение.
from sklearn.decomposition import PCA from sklearn.decomposition import FastICA from sklearn.decomposition import FactorAnalysis from sklearn.decomposition import TruncatedSVD
Для сравнения методов между собой и с эталонным значением воспользуемся евклидовым расстоянием:
где x — вектор эталонных оценок, ym — вектор приближений при сокращении размерности до m, n — число пар предложений, для которых надо рассчитать косинусное сходство, xi и yi — i‑ые элементы соответствующих векторов.
Эталонная оценка | Семантическое сходство | Семантическое сходство с размерностью 50 методом ICA |
1.0000 | 0.958966 | 0.953331 |
0. 9500 | 0.903258 | 0.909175 |
1.0000 | 0.938772 | 0.916701 |
0.4800 | 0.828721 | 0.835421 |
0.5500 | 0.805219 | 0.771535 |
0.5230 | 0.783895 | 0.762820 |
Таким образом, получим вектор эталонных оценок, основной вектор приближений (семантическое сходство), вектора приближений n‑ой размерности и i‑го метода (например, размерность 50 и метод ICA).
Приведем пример кода для метода ICA:
eucl_dis_ica = [] for el in dims: ica = FastICA(n_components = el) mas_embed_fit = ica.fit_transform(mas_embed) # семантическое сходство tmp_res = [] for i in range (0, 3000, 2): semantic_sim = 1 - cosine(mas_embed_fit[i], mas_embed_fit[i+1]) tmp_res. append(semantic_sim) # евклидово расстояние df[f'reduce_sim_ica_{el}'] = tmp_res df['eucl_dis_ica'] = (df['score'] - df[f'reduce_sim_ica_{el}'])**2 eucl_dis_ica.append(df['eucl_dis_ica'].sum() ** 0.5)
Итого, получим функцию зависимости евклидового расстояния и числа размерностей. Найдя локальный минимум евклидового расстояния до эталонной оценки на интересующем нас интервале [50; 450] размерностей, получим оптимальное количество размерностей, где нет существенных потерь информации.
Визуализируем рассчитанные данные:
plt.figure(figsize=(12,7.5), dpi= 80) plt.plot(dims, eucl_dis_pca, color='tab:red', label='PCA') plt.text(dims[-1], eucl_dis_pca[-1], 'PCA', fontsize=12, color='tab:red') plt.plot(dims, eucl_dis_ica, color='tab:blue', label='ICA') plt.text(dims[-1], eucl_dis_ica[-1], 'ICA', fontsize=12, color='tab:blue') plt.plot(dims, eucl_dis_fa, color='tab:green', label='FA') plt.text(dims[-1], eucl_dis_fa[-1], 'FA', fontsize=12, color='tab:green') plt. plot(dims, eucl_dis_tsvd, color='tab:green', label='TSVD') plt.text(dims[-1], eucl_dis_tsvd[-1], 'TSVD', fontsize=12, color='tab:green') plt.plot(dims, targ, color='tab:orange', label='Target', linestyle='dashed') plt.ylabel('Евклидово расстояние') plt.xlabel('Размерность') plt.legend(loc='upper right', ncol=2, fontsize=12) plt.show()
Оранжевая пунктирная линия на графике (target) — это значение евклидового расстояния между вектором эталонных оценок и вектором семантического сходства (т. е. основным вектором приближения без уменьшения размерностей). С этим значением мы и будем сравнивать получившиеся функции методов снижения размерностей.
Из графика видно, что:
Алгоритмы ICA и FA отработали лучше всего и приблизились к эталонной оценке даже больше, чем target, с локальным минимум около 200 размерностей (что в 2.5 раза меньше начальных 512).
Алгоритм PCA показал себя чуть хуже, но при этом при 200 размерностях уже совпал с target.
Алгоритм TSVC в чистом виде не позволяет эффективно снизить количество размерностей.
Итог
Рассмотренный алгоритм позволяет упростить модель за счет уменьшения числа избыточных, слабо информативных признаков, и это позволяет:
Снизить объем обрабатываемых многомерных эмбеддингов. Это также уменьшает объем задействуемой памяти и увеличивает скорость работы дальнейшей обработки этих данных. На конкретном примере сокращение объема данных составило около 60%.
Повысить эффективность модели. После подбора оптимального сочетания метода снижения размерности и целевого количества измерений удалось добиться сохранения качества данных и даже получить результат лучше, чем при исходных параметрах.
Посмотреть весь код можно под спойлером или на GitHub.
Развернуть кодimport numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy.spatial.distance import cosine from sentence_transformers import SentenceTransformer from datasets import load_dataset # загрузим модель model = SentenceTransformer("distiluse-base-multilingual-cased-v1") # загрузим датасет df_dev = load_dataset("stsb_multi_mt", name="ru", split="dev") # конвертнем датасет в датафрейм res = [] F = True for df in df_dev: score = float(df['similarity_score'])/5. 0 # нормализация эталонной оценки embeddings = model.encode([df['sentence1'], df['sentence2']]) semantic_sim = 1 - cosine(embeddings[0], embeddings[1]) # косинусное сходство между парами предложений res.append([df['sentence1'], df['sentence2'], score, semantic_sim]) if F == True: mas_embed = embeddings F = False else: mas_embed = np.concatenate((mas_embed, embeddings), axis=0) df = pd.DataFrame(res, columns=['sentence1', 'sentence2', 'score', 'semantic_sim']) from sklearn.decomposition import PCA from sklearn.decomposition import FastICA from sklearn.decomposition import FactorAnalysis from sklearn.decomposition import TruncatedSVD # создадим список размерностей dims = [x for x in range(50, 451, 50)] # рассчитаем Евклидово расстояние для базовой модели df['eucl_dis'] = (df['score'] - df['semantic_sim'])**2 tmp_targ = df['eucl_dis'].sum() ** 0.5 targ = [tmp_targ for _ in range(len(dims))] # для каждого метода уменьшения размерности # найдем эмбеддинги новых размерностей # и для каждой пары предложений косинусное сходство # для каждой размерности найдем евклидово расстояние до эталонной оценки # ICA eucl_dis_ica = [] for el in dims: ica = FastICA(n_components = el) mas_embed_fit = ica. fit_transform(mas_embed) # семантическое сходство tmp_res = [] for i in range (0, 3000, 2): semantic_sim = 1 - cosine(mas_embed_fit[i], mas_embed_fit[i+1]) tmp_res.append(semantic_sim) # евклидово расстояние df[f'reduce_sim_ica_{el}'] = tmp_res df['eucl_dis_ica'] = (df['score'] - df[f'reduce_sim_ica_{el}'])**2 eucl_dis_ica.append(df['eucl_dis_ica'].sum() ** 0.5) # PCA eucl_dis_pca = [] for el in dims: pca = PCA(n_components = el) mas_embed_fit = pca.fit_transform(mas_embed) # семантическое сходство tmp_res = [] for i in range (0, 3000, 2): semantic_sim = 1 - cosine(mas_embed_fit[i], mas_embed_fit[i+1]) tmp_res.append(semantic_sim) # евклидово расстояние df[f'reduce_sim_pca_{el}'] = tmp_res df['eucl_dis_pca'] = (df['score'] - df[f'reduce_sim_pca_{el}'])**2 eucl_dis_pca.append(df['eucl_dis_pca'].sum() ** 0.5) # FA eucl_dis_fa = [] for el in dims: fa = FactorAnalysis(n_components = el) mas_embed_fit = fa. fit_transform(mas_embed) # семантическое сходство tmp_res = [] for i in range (0, 3000, 2): semantic_sim = 1 - cosine(mas_embed_fit[i], mas_embed_fit[i+1]) tmp_res.append(semantic_sim) # евклидово расстояние df[f'reduce_sim_fa_{el}'] = tmp_res df['eucl_dis_fa'] = (df['score'] - df[f'reduce_sim_fa_{el}'])**2 eucl_dis_fa.append(df['eucl_dis_fa'].sum() ** 0.5) # TSVD eucl_dis_tsvd = [] for el in dims: tsvd = TruncatedSVD(n_components = el) mas_embed_fit = tsvd.fit_transform(mas_embed) # семантическое сходство tmp_res = [] for i in range (0, 3000, 2): semantic_sim = 1 - cosine(mas_embed_fit[i], mas_embed_fit[i+1]) tmp_res.append(semantic_sim) # евклидово расстояние df[f'eucl_dis_tsvd_{el}'] = tmp_res df['eucl_dis_tsvd'] = (df['score'] - df[f'eucl_dis_tsvd_{el}'])**2 eucl_dis_tsvd.append(df['eucl_dis_tsvd'].sum() ** 0.5) # нарисуем график plt.figure(figsize=(12,7.5), dpi= 80) plt. plot(dims, eucl_dis_pca, color='tab:red', label='PCA') plt.text(dims[-1], eucl_dis_pca[-1], 'PCA', fontsize=12, color='tab:red') plt.plot(dims, eucl_dis_ica, color='tab:blue', label='ICA') plt.text(dims[-1], eucl_dis_ica[-1], 'ICA', fontsize=12, color='tab:blue') plt.plot(dims, eucl_dis_fa, color='tab:green', label='FA') plt.text(dims[-1], eucl_dis_fa[-1], 'FA', fontsize=12, color='tab:green') plt.plot(dims, eucl_dis_tsvd, color='tab:green', label='TSVD') plt.text(dims[-1], eucl_dis_tsvd[-1], 'TSVD', fontsize=12, color='tab:green') plt.plot(dims, targ, color='tab:orange', label='Target', linestyle='dashed') plt.ylabel('Евклидово расстояние') plt.xlabel('Размерность') plt.legend(loc='upper right', ncol=2, fontsize=12) plt.show()
Определение сходства и значение — Merriam-Webster
sim·i·lar·i·ty ˌsi-mə-ˈler-ə-tē
-la-rə-
1
: качество или состояние сходства : сходство
2
: сопоставимый вид : соответствие
Синонимы
- сходство
- сообщество
- сопоставимость
- корреспонденция
- подобие
- параллелизм
- сходство
- similitude
Просмотреть все синонимы и антонимы в тезаурусе
Примеры предложений
Я сомневаюсь, что эти слова связаны более чем сходство по звучанию. Книги имеют сходство идей. Я вижу в них много сходств . Глядя на эти окаменелости, я вижу некоторое сходство с современными птицами. я очень мало вижу сходство между вашей ситуацией и его.
Недавние примеры в Интернете Их высказывания поражали своим сходством . — Томас Лейк, CNN Money , 21 апреля 2023 г. Оба плана имеют один сходство , однако. — Лаура Шульте, Journal Sentinel , 7 апреля 2023 г. В последовательных сообщениях Instagram Story Мур похвалил дружбу Брауна и поделился их сходствами . — Келли Винн, Peoplemag , 6 апреля 2023 г. Их профессиональное сходство , однако, не было единственной причиной их дружбы. —Кристофер Паркер, 9 лет0047 Smithsonian Magazine , 5 апреля 2023 г. Одним из больших преимуществ SiC MOSFET является их сходство с традиционными кремниевыми — даже упаковка идентична. — IEEE Spectrum , 26 марта 2023 г. Хип-хоп объединяет людей из-за их сходств и отбрасывает различия в сторону. — Джонатан Ландрам младший, 9 лет.0047 Fortune , 23 марта 2023 г. Несмотря на их сходство , эти заболевания имеют некоторые различия в плане передачи, симптомов, продолжительности и лечения. — Мира Миллер, Verywell Health , 21 марта 2023 г. Их расовое сходство стало особенно значимым для г-жи Фуден после их свидания за кофе. — Тэмми Ла Горс, 9 лет.0047 New York Times , 17 марта 2023 г. Узнать больше
Эти примеры программно скомпилированы из различных онлайн-источников, чтобы проиллюстрировать текущее использование слова «сходство». Любые мнения, выраженные в примерах, не отражают точку зрения Merriam-Webster или ее редакторов. Отправьте нам отзыв об этих примерах.
История слов
Этимология
заимствовано из новой латыни similaritāt-, similaritās, из средневековой латыни similaris аналог + латиница -itāt-, -itās -ity
Первое известное использование
1615, в значении, определенном в чувство 1
Путешественник во времени
Первое известное использование подобия было в 1615 году
Посмотреть другие слова того же года
Словарные статьи Около
сходствопохожий
сходство
аналогично размещены
Посмотреть другие записи поблизости
Процитировать эту запись «Сходство».
Словарь Merriam-Webster.com , Merriam-Webster, https://www.merriam-webster.com/dictionary/similarity. Доступ 21 мая. 2023.Копия цитирования
Детское определение
сходство
существительное
sim·i·lar·i·ty ˌsim-ə-ˈlar-ət-ē
1
: качество или состояние подобия : сходство
2
: точка, в которой вещи подобны : 90 010 переписка
Еще от Merriam-Webster о сходстве
Нглиш: Перевод сходства для говорящих на испанском языке
Британский английский: Перевод сходства для говорящих на арабском языке
Последнее обновление: — Обновлены примеры предложений
Подпишитесь на крупнейший словарь Америки и получите тысячи дополнительных определений и расширенный поиск без рекламы!
Merriam-Webster без сокращений
Можете ли вы решить 4 слова сразу?
Можете ли вы решить 4 слова сразу?
гамма
См. Определения и примеры »
Получайте ежедневно по электронной почте Слово дня!
Сходство Определение и значение | Dictionary.com
- Основные определения
- Синонимы
- Тест
- Связанный контент
- Примеры
[sim-uh-lar-i-tee]
/ ˌsɪm əˈlær ɪ ti /
Сохранить это слово !
См. синонимы для: сходства / сходства на Thesaurus.com
существительное во множественном числе сходство·и·лар·и·связь.
состояние сходства; сходство; сходство.
аспект, черта или черта, подобная или напоминающая другую или другую: сходство дикции.
ДРУГИЕ СЛОВА ДЛЯ СХОДСТВА
1 сходство, соответствие, параллелизм.
См. синонимы сходства на Thesaurus.com
ПРОТИВОПОЛОЖНОСТИ ДЛЯ сходства
1 различие.
См. антонимы для сходства на Thesaurus.com
ВИКТОРИНА
МОЖЕТЕ ЛИ ВЫ ОТВЕЧАТЬ НА ЭТИ ОБЩИЕ ГРАММАТИЧЕСКИЕ СПОРЫ?
Есть грамматические дебаты, которые никогда не умирают; и те, которые выделены в вопросах этой викторины, наверняка снова всех разозлят. Знаете ли вы, как отвечать на вопросы, которые вызывают самые ожесточенные споры по грамматике?
Вопрос 1 из 7
Какое предложение верно?
Происхождение сходства
Впервые записано в 1655–1665 гг.; сходство + -ity
изучение синонимов сходства
1. См. сходство.
ДРУГИЕ СЛОВА ОТ сходства
non·sim·i·lar·i·ty, существительное, множественное число non·sim·i·lar·i·ties.un·sim·i·lar·i·ty, существительное, множественное число не·подобия·и·отличия.Dictionary.com Полный текст На основе Random House Unabridged Dictionary, © Random House, Inc., 2023 г.
Слова, связанные со сходством
аффинити, аналогия, близость, совпадение, сравнение, связь, корреляция, гармония, родство, параллель, отношение, подобие, тождество, согласие, подобие, приближение, ассоциация, сопоставление, общность, сопоставимость
Как использовать сходство в предложении
Эти атаки имели явное сходство с вредоносным ПО, использованным против Sony.
Американские шпионы говорят, что годами выслеживали «хакеров Sony»|Шейн Харрис|2 января 2015 г.|DAILY BEAST
Может быть, но эксперты говорят, что «сходство» с другими атаками вряд ли можно назвать удачным.
ФБР не перестанет обвинять Северную Корею во взломе Sony — несмотря на новые доказательства|Шейн Харрис|30 декабря 2014 г. |DAILY BEAST
Даже с израильской стороны некоторые признали сходство.
Арабы — это Майкл Брауны Израиля|Дин Обейдаллах|3 декабря 2014|DAILY BEAST
Сходство между той трагедией и сегодняшними травмами доказывает, что за столетие мало что изменилось.
Когда футбол в Вест-Пойнте стал фатальным|Николаус Миллс|30 октября 2014|DAILY BEAST
Если вы вспомните прошлое, возвращаясь к Уиллу Гарднеру, между Кэри и Уиллом есть сходство.
Звезда сериала «Хорошая жена» Майк Колтер защищает инстинкты убийцы Лемонда Бишопа|Кевин Фэллон|29 сентября 2014 г.|DAILY BEAST
В самих конституциях двух правительственных организаций, малых и больших, есть сходство.
Уильям Бредфорд из Плимута|Альберт Хейл Пламб
Различия между этими двумя машинами, а также их сходство можно объяснить с помощью общего краткого утверждения.
Паровая сталь и электричество|Джеймс В. Стил
Он так стремится обнаружить различия, что упускает из виду сходства — нет, тождества.