вступление

Это часть серии сообщений в блогах, посвященных внедрению искусственного интеллекта. Если вас интересует предыстория этой истории или ее развитие:

#1) Как парсить локальные результаты Google с помощью искусственного интеллекта?
#2) Реальный пример машинного обучения на Rails
#3) Советы и сравнения по обучению ИИ
#4) Машинное обучение в парсинге с помощью Rails
#5) Реализация моделей ONNX в Rails
#6) Как гибридный парсер ML превосходит традиционный парсер
#7) Как для оценки реализации машинного обучения на Rails

На этой неделе мы покажем, как мы тестируем нашу реализацию машинного обучения, которую мы разработали для SerpApi's Google Local Pack Scraper API на Rails.

I — тест низкой точности для общего процесса синтаксического анализа (100 раз)

Мы будем использовать те же запросы, что и в сообщении блога на прошлой неделе, чтобы создать эталон для отчета о миллисекундах. Однако здесь следует упомянуть одну вещь: среднее время, затрачиваемое на 100 повторений одного и того же процесса, будет подвержено погрешности. Я проведу еще один тест на единственном результате, чтобы измерить более реалистичные цифры. Этот процесс будет отражать то, как он повлияет на код пользователя, выполняющего поиск. Случаи со странным поведением должны отражаться независимо от предела погрешности.

Вот код теста для Rails:

traditional_benchmarks = []
ml_benchmarks = []
100.times do
  traditional_benchmarks << Benchmark.ms { search.parse! false }
  ml_benchmarks << Benchmark.ms { search.parse! true }
end
traditional_average = traditional_benchmarks.sum / traditional_benchmarks.size
ml_average = ml_benchmarks.sum / ml_benchmarks.size
average_difference = ml_average - traditional_average 
if traditional_average < ml_average
  ratio_change = ml_average / traditional_average
  change = "slower"
else
  ratio_change = traditional_average / ml_average
  change = "faster"
end
puts "Traditional Parser Benchmark Average: #{traditional_average} ms"
puts "ML Hybrid Parser Benchmark Average: #{ml_average} ms"
puts "Average Difference: #{average_difference} ms"
puts "ML Hybrid Parser is #{ratio_change} times #{change} than Traditional Parser"

Дантист

"local_results": {
    "places": [
      {
        "position": 1,
        "title": "Austin Cosmetic Dentistry by Tejas Patel, DDS",
        "address": "221 W 6th St #940",
        "rating": 4.9,
        "reviews": 275,
        "hours": "Closes soon ⋅ 4PM",
        "phone": "(512) 476-2336",
        "lsig": "AB86z5V7-Co76bptvuPt00IjA1ut",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5V7-Co76bptvuPt00IjA1ut&ludocid=17726167689886688143&q=Dentist&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.26795,
          "longitude": -97.74515
        }
      },
      {
        "position": 2,
        "title": "East Austin Dental",
        "address": "1000 E 5th St STE 110 · In Corazon Apartments",
        "rating": 4.8,
        "hours": "Closes soon ⋅ 4PM",
        "phone": "(512) 499-0067",
        "lsig": "AB86z5WbLP6dZDWYnq91fO356Est",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5WbLP6dZDWYnq91fO356Est&ludocid=16796499427254916480&q=Dentist&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.264153,
          "longitude": -97.73239
        }
      },
      {
        "position": 3,
        "title": "Austin Comestic Dentistry",
        "phone": "(512) 551-1880",
        "lsig": "AB86z5Wcc9TbOpkoDmgKyi1TUoUY",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5Wcc9TbOpkoDmgKyi1TUoUY&ludocid=1429802282623203746&q=Dentist&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.272924,
          "longitude": -97.7444
        }
      }
    ]
  },

-Query: Dentist
Среднее значение для традиционного синтаксического анализатора: 344.3701663099887 ms
Среднее значение для гибридного синтаксического анализатора ML: 349.1813165999997 ms
Средняя разница: +4.811150290011028 ms
гибридный синтаксический анализатор ML на 1.0139708684453235 times slower больше, чем традиционный синтаксический анализатор.

Книжный магазин

"local_results": {
    "places": [
      {
        "position": 1,
        "title": "BookPeople",
        "type": "Book store",
        "address": "603 N Lamar Blvd",
        "rating": 4.7,
        "delivery": "In-store shopping·Curbside pickup·Delivery",
        "hours": "Open ⋅ Closes 7PM",
        "phone": "(512) 472-5050",
        "lsig": "AB86z5VOIjaQM_OHJDDP78c75lF9",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5VOIjaQM_OHJDDP78c75lF9&ludocid=15954964542614962629&q=Bookstore&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.271843,
          "longitude": -97.752945
        }
      },
      {
        "position": 2,
        "title": "South Congress Books",
        "type": "Book store",
        "address": "1608 S Congress Ave",
        "rating": 4.5,
        "reviews": 203,
        "delivery": "In-store shopping·Curbside pickup",
        "hours": "Open ⋅ Closes 6PM",
        "phone": "(512) 916-8882",
        "lsig": "AB86z5WuflRhwRxW1_l4kcQe8HiA",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5WuflRhwRxW1_l4kcQe8HiA&ludocid=4735403951136453416&q=Bookstore&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.247662,
          "longitude": -97.750626
        }
      },
      {
        "position": 3,
        "title": "12th Street Books",
        "type": "Used book store",
        "address": "827 W 12th St",
        "rating": 4.3,
        "reviews": 13,
        "hours": "Temporarily closed",
        "phone": "(512) 499-8828",
        "lsig": "AB86z5WZ7ooDkCDty0PCVl-RnDqT",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5WZ7ooDkCDty0PCVl-RnDqT&ludocid=16276231750099540045&q=Bookstore&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.276222,
          "longitude": -97.74959
        }
      }
    ]
  },

Запрос: Bookstore
Среднее значение для традиционного синтаксического анализатора: 282.3834452000028 ms
Среднее значение для гибридного синтаксического анализатора ML: 276.60691514000746 ms
Средняя разница: -5.776530059995366 ms
гибридный синтаксический анализатор ML на 1.0208835345171017 times faster больше, чем традиционный синтаксический анализатор.

Мексиканский ресторан

"local_results": {
    "places": [
      {
        "position": 1,
        "title": "Tres Potrillos",
        "type": "Mexican",
        "delivery": "Dine-in·Takeout·No delivery",
        "lsig": "AB86z5UnM7a_iraiJwHbX4RTV74b",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5UnM7a_iraiJwHbX4RTV74b&ludocid=4949025990990656275&q=Mexican+Restaurant&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.267153,
          "longitude": -97.74306
        }
      },
      {
        "position": 2,
        "title": "Comedor",
        "type": "\"Their interpretation of mexican cuisine is exceptional.\"",
        "address": "501 Colorado St",
        "rating": 4.4,
        "reviews": 491,
        "hours": "Closed ⋅ Opens 5PM",
        "lsig": "AB86z5XVNkH5NYsRCN5t2FCdM89-",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5XVNkH5NYsRCN5t2FCdM89-&ludocid=6958240678106455106&q=Mexican+Restaurant&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.2676,
          "longitude": -97.74416
        }
      },
      {
        "position": 3,
        "title": "Iron Cactus Mexican Restaurant and Margarita Bar",
        "type": "Mexican",
        "price": "$$",
        "address": "606 Trinity St",
        "rating": 4.1,
        "delivery": "Dine-in·Takeout·No delivery",
        "lsig": "AB86z5X7Qq4vf--TBLEsXDYRUbVd",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5X7Qq4vf--TBLEsXDYRUbVd&ludocid=2855033105612448970&q=Mexican+Restaurant&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.2674,
          "longitude": -97.73945
        }
      }
    ]
  },

Запрос: Mexican Restaurant
Среднее значение для традиционного синтаксического анализатора: 225.45420559999457 ms
Среднее значение для гибридного синтаксического анализатора ML: 223.7522506300229 ms
Средняя разница: -1.7019549699716663 ms
гибридный синтаксический анализатор ML на 1.007606426148472 times faster больше, чем традиционный синтаксический анализатор.

Страховое агентство

"local_results": {
    "places": [
      {
        "position": 1,
        "title": "Amco Insurance Austin",
        "type": "Insurance agency",
        "address": "RdB, 12603 Market Street",
        "rating": 1,
        "reviews": 1,
        "phone": "(713) 450-4949",
        "lsig": "AB86z5XbiSodHxmtytu2NF12jBla",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5XbiSodHxmtytu2NF12jBla&ludocid=3762069798187571614&q=Insurance+Agency&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.267153,
          "longitude": -97.74306
        }
      },
      {
        "position": 2,
        "title": "Michaels Insurance Group",
        "type": "Insurance agency",
        "address": "501 Congress Ave Suite 150A",
        "hours": "Open ⋅ Closes 6PM",
        "phone": "(512) 593-1171",
        "lsig": "AB86z5UOT_Ai1eBIwgwkGAIAMAF8",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5UOT_Ai1eBIwgwkGAIAMAF8&ludocid=16496161963606301439&q=Insurance+Agency&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.267204,
          "longitude": -97.74261
        }
      },
      {
        "position": 3,
        "title": "Jones Derek",
        "type": "Insurance agency",
        "address": "401 Congress Ave # 1900 · In Frost Bank Tower",
        "phone": "(512) 469-3430",
        "years_in_business": "10+ years in business",
        "lsig": "AB86z5VtQJgNsgG5T_iWQdrzIjPr",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5VtQJgNsgG5T_iWQdrzIjPr&ludocid=1165792112025048434&q=Insurance+Agency&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.266655,
          "longitude": -97.74313
        }
      }
    ]
  },

Запрос: Insurance Agency
Среднее значение для традиционного синтаксического анализатора: 243.73682075000943 ms
Среднее значение для гибридного синтаксического анализа ML: 242.52781047999179 ms
Средняя разница: -1.209010270017643 ms
гибридный синтаксический анализатор ML на 1.0049850376648553 times faster, чем традиционный синтаксический анализатор

Кофе

"local_results": {
    "places": [
      {
        "position": 1,
        "title": "Houndstooth Coffee",
        "type": "Coffee shop",
        "price": "$$",
        "address": "401 Congress Ave #100c · In Frost Bank Tower",
        "rating": 4.6,
        "delivery": "Dine-in·Takeout·No delivery",
        "lsig": "AB86z5Vdw6C2pJpM0xQ6JUx2KONU",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5Vdw6C2pJpM0xQ6JUx2KONU&ludocid=11265938073076301333&q=Coffee&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.2664,
          "longitude": -97.74278
        }
      },
      {
        "position": 2,
        "title": "Starbucks",
        "type": "Coffee shop",
        "price": "$$",
        "address": "600 Congress Ave",
        "rating": 4.1,
        "reviews": 513,
        "delivery": "Dine-in·Drive-through·Delivery",
        "lsig": "AB86z5XTJ_Io_anVBu2fU6Zaqu3b",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5XTJ_Io_anVBu2fU6Zaqu3b&ludocid=10605736027611436825&q=Coffee&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.26826,
          "longitude": -97.74296
        }
      },
      {
        "position": 3,
        "title": "The Hideout Coffee House",
        "type": "Coffee shop",
        "price": "$",
        "address": "617 Congress Ave",
        "rating": 4.4,
        "delivery": "Dine-in·Takeout·No-contact delivery",
        "hours": "Closed ⋅ Opens 7AM Thu",
        "lsig": "AB86z5WSxdnDKVF_iLXNN6Lg0UQ5",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5WSxdnDKVF_iLXNN6Lg0UQ5&ludocid=15498522356495312950&q=Coffee&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.268572,
          "longitude": -97.742165
        }
      }
    ]
  },

Запрос: Coffee
Среднее значение для традиционного синтаксического анализатора: 381.3813184999935 ms
Среднее значение для гибридного синтаксического анализатора ML: 374.56337533000345 ms
Средняя разница: -6.817943169990031 ms
гибридный парсер ML на 1.0182023754030494 times faster больше, чем традиционный парсер

II — Точный контрольный показатель для общего процесса синтаксического анализа

Приведенные выше контрольные показатели показывают, как реализация ведет себя в краткосрочной перспективе, и в ней нет признаков странных случаев. Однако давайте реализуем тот же тест для единственного результата с большей точностью. Мы запустим оба процесса синтаксического анализа на 60 секунд и сравним количество запусков:

require "benchmark/ips"
Benchmark.ips do |x|
  x.config(:time => 60, :warmup => 2)
  x.report("Traditional Parser") { search.parse! false }
  x.report("ML Hybrid Parser") { search.parse! true }
  x.compare!
end

Вот результат:

"local_results": {
    "places": [
      {
        "position": 1,
        "title": "Austin MacWorks",
        "type": "Computer store",
        "address": "450 W 2nd St · In 2nd Street District",
        "rating": 3.6,
        "reviews": 35,
        "delivery": "In-store shopping·In-store pickup",
        "hours": "Closes soon ⋅ 6PM",
        "phone": "(512) 476-7000",
        "lsig": "AB86z5UwIX4i7B78tBctQlVN-S5I",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5UwIX4i7B78tBctQlVN-S5I&ludocid=7461317996150463296&q=Computer+Store&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.265661,
          "longitude": -97.74838
        }
      },
      {
        "position": 2,
        "title": "Mactell Corporation",
        "type": "Computer store",
        "phone": "(512) 457-1133",
        "lsig": "AB86z5UVY5r6ZpGnUqP-wixtE-Nu",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5UVY5r6ZpGnUqP-wixtE-Nu&ludocid=1747786920379540476&q=Computer+Store&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.272924,
          "longitude": -97.7444
        }
      },
      {
        "position": 3,
        "title": "Campus Computer Store",
        "type": "Computer store",
        "address": "2304 Whitis Avenue, (FAC) 109 · In the University of Texas at Austin",
        "rating": 3.8,
        "reviews": 53,
        "delivery": "In-store shopping·Curbside pickup·Delivery",
        "hours": "Closes soon ⋅ 6PM",
        "phone": "(512) 475-6550",
        "lsig": "AB86z5XQ-nWlsJPMAzOoIwJ_Pjll",
        "place_id_search": "https://serpapi.com/search.json?device=desktop&engine=google&gl=us&google_domain=google.com&hl=en&location=Austin%2C+Texas%2C+United+States&lsig=AB86z5XQ-nWlsJPMAzOoIwJ_Pjll&ludocid=15624962612924024738&q=Computer+Store&tbm=lcl",
        "gps_coordinates": {
          "latitude": 30.286259,
          "longitude": -97.74032
        }
      }
    ]
  },Calculating -------------------------------------
  Traditional Parser      5.741  (± 0.0%) i/s -    343.000  in  60.020695s
    ML Hybrid Parser      4.807  (± 0.0%) i/s -    288.000  in  60.158318s
Comparison:
  Traditional Parser:        5.7 i/s
    ML Hybrid Parser:        4.8 i/s - 1.19x  (± 0.00) slower

III — Эталонный анализ процесса локального синтаксического анализа

Давайте также определим локальный эталон для локального процесса синтаксического анализа. Это прямое сравнение двух методов. Вот тест для этого:

require "benchmark/ips"
Benchmark.ips do |x|
  x.config(:time => 60, :warmup => 2)
  x.report("ML Hybrid Parser") { get_local_results_desktop_ml local_results_top }
  x.report("Traditional Parser") { get_local_results_desktop }
  x.compare!
end

Выход:

Calculating -------------------------------------
  Traditional Parser     38.829  (± 2.6%) i/s -      2.328k in  60.015623s
    ML Hybrid Parser     23.121  (± 4.3%) i/s -      1.384k in  60.003592s
Comparison:
  Traditional Parser:       38.8 i/s
    ML Hybrid Parser:       23.1 i/s - 1.68x  (± 0.00) slower

IV — Заключение

Если мы примем во внимание точные результаты, локальное изменение в 1,68 раза медленнее и в 1,19 раза медленнее для всего процесса синтаксического анализа (внутреннего для поискового запроса и только в результатах с локальной частью), это все еще хороший перевод с точки зрения миллисекунд. Учитывая, что традиционный синтаксический анализатор дает слишком много ложных результатов, эта реализация будет иметь решающее значение, не вызывая неожиданных задержек во времени загрузки. Я видел, что он работает лучше в других поисках. Минимум, который я могу получить, в 1,07 раза медленнее в точных результатах для всего процесса синтаксического анализа. Максимум, с чем я столкнулся, это результат, поэтому я делюсь им в качестве примера для честного представления. В любом случае для пользователя это будет незначительно. Я хотел бы поблагодарить читателя за внимание и блестящих людей из SerpApi за всю их поддержку. На следующей неделе мы поговорим об общих целях тестирования машинного обучения.