fbpx

An unlikely competitor enters the search engine market as Verizon Media launches its privacy-focused OneSearch.

OneSearch promises not to track, store, or share personal or search data with advertisers, which puts it in direct competition with DuckDuckGo. It’s available now on desktop and mobile at OneSearch.com.

What differentiates Verizon Media’s OneSearch from DuckDuckGo, a more established privacy-focused search engine, is the ability for businesses to integrate it with their existing privacy and security products.

In an announcement, the company states:

“OneSearch doesn’t track, store, or share personal or search data with advertisers, giving users greater control of their personal information in a search context. Businesses with an interest in security can partner with Verizon Media to integrate OneSearch into their privacy and security products, giving their customers another measure of control.”

Another unique offering from OneSearch is its advanced privacy mode. When enabled, OneSearch’s encrypted search results link will expire within an hour.

OneSearch’s advanced privacy mode is designed for situations where multiple people are using the same device, or if a search results link is being shared with a friend.

The full array of privacy-focused features offered by OneSearch include:

  • No cookie tracking, retargeting, or personal profiling
  • No sharing of personal data with advertisers
  • No storing of user search history
  • Unbiased, unfiltered search results
  • Encrypted search terms

Although it doesn’t sell data to advertisers, OneSearch does rely on advertising to keep its service free. Rather than using cookies and browsing history to target ads, OneSearche’s contextual ads are based on things like the current keyword being searched for.

OneSearch is only available in North America on desktop and mobile web browsers, though it will be available in other countries soon. A mobile app for Android and iOS will be available later this month.

[Source: This article was published in searchenginejournal.com By Matt Southern - Uploaded by the Association Member: Jay Harris]

Categorized in Search Engine

As a business, you want to continuously be reaching out to new customers to expand your customer base. While getting found online is ideal, it is becoming increasingly difficult as search engines process over 3.5 billion searches every day. The good news is that if you are having trouble finding new customers through search engines, there are several other ways to gain new customers online.

Get Listed

One of the easiest ways to grow your online presence is to take advantage of the reputable online directories that exist online. Most directories and listings will remain for some time and all you have to do is submit your information once. The best part about directories and lists is that your business is listed where customers are looking.

Claim Existing Listings

Many sites, including Google, already have listings for your business. Make sure that you claim these listings. This means making sure all information included in the profile is accurate and up-to-date. This way when customers come across your profile they are getting the information they need to contact you.

Look For New Opportunities

Another option is to look for new opportunities. Actively seek out directories or listings that are in your niche. For instance, you may find a directory for wedding photographers in Boston and request to be added to the directory.

Another option is to keep an eye out for any writers looking for products or businesses to include in lists. Working with a site like HelpAReporter.com can help you connect with journalists and get your product featured in publications, reaching potential customers.

Online Advertising

Online advertising is another way to reach new customers. You want to get your advertisements in front of prospective customers and convert views into leads and sales. This means working with major advertising companies including Google, Facebook, and YouTube. Using these online advertising platforms can help you build brand awareness and provide reminders to curious buyers.

YouTube Ads

While YouTube is owned by Google, its ads hold a place of their own. There are some creative practices for YouTube video ads— TrueView in-stream ads (can be skipped), discovery ads (come up in search results), and bumper ads (cannot be skipped). With these ads, you have a captive audience that you want to engage in the first few seconds of video. If you can do this successfully you can quickly build brand awareness, as well as leads and sales.

Google Ads

With Google Ads, you can opt for either display ads (with a picture) or search network ads (top sponsored search results). Surprisingly, if implemented correctly, search network ads can yield high conversion rates.

This means users that click on these links are often ready to spend. By choosing search network ads, you can secure some of the top positions for keywords related to your products and services. In turn, your company can realize significant ROI.

Facebook Ads

Facebook Ads are slightly different in that they are on a social platform, often when consumers are not actively looking to buy. More often than not, Facebook Ads are designed like other stories in the newsfeed, all to drive clicks. This means that your landing page is as important as your ad is in converting to leads and sales. However, sidebar display ads and carousel ads are available (and effective) on Facebook too.

Meet Customers Where They Are

While digital advertising costs money, there are other ways to find new customers online that only cost time. This often entails meeting customers where they already are online. This can be as simple as going to the sites that your customers already use and engaging with them as your brand or company.

However, it is important to note that to do this successfully, you actually have to post engaging content. Simply dropping your link or only promoting your product will not yield positive results.

Common places where you can do this is on Quora, forums like Reddit, and industry and related niche blogs. By posting content that is relatable and engaging you establish yourself as an expert in the field. This means customers will take you more seriously when you recommend a product or service that you offer if it is directly related to the topic at hand and could be beneficial for the user you are responding to. Again, it’s important to not simply drop links if you want to be seen as an expert in your industry.

Your Own Content

Creating your own content for prospective customers is another great way to get found online. You want the content to be engaging and helpful for customers. This could mean answering common questions in your industry, discussing popular topics in your niche, etc. There are several ways that you can create content that adds value to prospective customers.

Write a Blog

Writing a blog on your company website can help new customers find you, especially if you search engine optimization techniques when writing each article. This will help your brand get found for a wide variety of keywords. It also helps establish you as an authority in the field and develops trust with your reader.

In addition to writing your own blog, you can also opt to write guest blogs for other sites to further establish yourself as an expert in the field and to help get your name in front of a larger audience.

Email Newsletters

Start collecting emails from both existing and potential customers. This allows you to reach out to them directly. Create newsletters that provide them valuable information that can help them with problems they may be facing.

For example, if you are a lawn care agency you could focus your email newsletters on tips for raking leaves, reminders to clean their gutters, etc. Again, don’t always focus on pushing products, but instead, focus on providing potential customers with value.

Social Media Presence

There are approximately 3.5 billion social media users worldwide, spanning across several generations. Moreover, users spend an average of 3 hours on social media every day. Therefore, chances are that by maintaining a social media presence you’ll be able to reach your target market.

Use your social media to tell the story of your brand and how your brand can be the solution to the problem they are facing. Gain a following by posting content that is relatable and memorable. This will help you build brand awareness and will also help you start to develop a relationship with your potential customers.

Creativity is Key

Most of the world is online. While search engines are wildly popular for finding things, there are many different ways to reach your target market online. The key is, however, that you create content that provides value to your potential customers so that they begin to trust you enough to convert into sales.

 [Source: This article was published in customerthink.com By Margarita Hakobyan - Uploaded by the Association Member: Grace Irwin]

Categorized in Search Engine

While there doesn’t seem to be an end yet to the US-Huawei story, the latter has gone full force in preparing for a life without Google. They have been working on something called AppGallery, the alternative to Google Play Store and Huawei Mobile Services, their replacement for Google Play Services. One important thing that seems to be missing is the all-important search, but Huawei hasn’t forgotten it. They are now testing out the Huawei Search app, which can be both good news and bad news for the rest of the world.

XDA Developers says that the testing is currently going on in the UAE but they were able to load it on the Huawei Mate 30 Pro to see what the deal is. It seems to be just a basic search app where you put in a query and it will give you search results. You get webpages, videos, news, or images. The app also gives you shortcuts to weather, sports, unit conversion, and calculator. You are also able to see your search history, give feedback, change app settings, and even supports the dark theme of EMUI 10 (their version of Android 10).

Huawei Search is operated by Aspiegel Limited, their subsidiary that is based out of Ireland. But as to what search engine powers this app, that is less certain. It doesn’t seem to match results from Google, Bing, Yahoo, DuckDuckGo, Yandex, Ask, or AOL. They may not be using a third-party search engine, and so that’s where the bad news may lie. China has been known to control the information that comes out of their Internet, and despite disassociating themselves from the supposed close ties with the government, Huawei is still a Chinese company subject to Chinese laws.

Forbes reports that this is a “potential filter” that will still be serving content to hundreds of millions of users worldwide from a company that is based “in the most highly censored country on the planet”. This is a potential concern as the Search app is a big part of the whole Huawei operating ecosystem that will be serving both Chinese and non-Chinese customers. This is one of the unintended consequences of the U.S. blacklisting the Chinese company – the potential for Huawei to “carve itself a dominant position” in this new alternative to the currently still-dominant Android/Google eco-system.

In any case, it’s still early days for the Huawei Search app and the whole Huawei Mobile Services. We might even see the U.S. backtracking on their blacklist. The question would be if Huawei would go back to Google’s loving arms or if they will continue to pursue their own platform, which will eventually result in the issues mentioned above.

[Source: This article was published in androidcommunity.com By Ida Torres - Uploaded by the Association Member: Issac Avila]

Categorized in Search Engine

Google published a new Search Console training video all about how to use the index coverage report.

Google’s Daniel Waisberg explains how to use Search Console to learn which pages have been crawled and indexed by Google, and how to deal with any problems found during that process.

First, the video gives an overview of the different components of the index coverage report and how to read the data included in them.

What’s Contained in the Index Coverage Report?

Search Console’s index coverage report provides a detailed look at all pages of a website that Google has either indexed or tried to index. The report also logs all errors Googlebot encountered when crawling a page.

a.jpeg

The index coverage report is made up of the following components:

  • Errors: These are critical issues that prevent pages from being indexed. Errors could include pages with the ‘noindex’ directive, pages with a server error, or pages with a 404 error.
  • Valid with warnings: This section includes pages that may or may not be shown in search results depending on the issue. An example is an indexed page that’s blocked by robots.txt.
  • Valid: These are indexed pages that are eligible to be served in search results.
  • Excluded: These are pages that are intentionally not indexed and won’t be included in search results.

On the summary page of the index coverage report you will also see a checkbox you can click to show impressions for indexed pages in Google search.

b.jpeg

How Should I Use The Index Coverage Report?

It’s recommended that site owners start by checking the chart on the summary page to learn if the valid pages trend is somewhat steady. Some amount of fluctuation is normal here. If you’re aware of content being published or removed you will see that reflected in the report.

Next, move onto reviewing the various error sections. You can quickly identity the most pressing issues because they’re sorted by severity. Start at the top of the list and work your way down.

c.jpeg

Once you know what needs to be fixed you can either fix the issues yourself, if you feel comfortable doing so, or share the details with your developer who can make code changes to your website.

After an issue has been fixed you can click on “Validate Fix” and Google will validate the changes.

s.jpeg

How Often Should I Check the Index Coverage Report?

It’s not necessary to check the index coverage report every day, Google says, because emails will be sent out whenever Search Console detects a new indexing error.

However, if an existing error gets worse, Google will not send out an email notification. So it’s necessary to check on the report at least once in a while to make sure nothing is going from bad to worse.

Those are the basics of the Search Console index coverage report. See the full video below:

[Source: This article was published in searchenginejournal.com By Matt Southern - Uploaded by the Association Member: Robert Hensonw]

Categorized in Search Engine

Lizzi Harvey from Google created a single page to follow the major updates made to the Google Search Developer documentation. So now you can just scan this page over here and see what updates she and her teammates made to the Google Search Developer documentations online.

Lizzi announced this on Twitter saying "Do you often wish there was 1 page that you could check and see what's new in the search dev docs? Well, here it is, backdated to include things that happened this month."

Screenshot 6

Will there be a way to subscribe to these updates? RSS probably is not going to happen.

Screenshot 7

[Source: This article was published in seroundtable.com By CBarry Schwartz - Uploaded by the Association Member: David J. Redcliff]

Categorized in Search Engine

What people search for on Google often aligns with what they search for and post about on social media. It seems obvious, but how often are social media marketers really thinking about this? With 75,000 Google queries per second according to 99firms, there’s bound to be keyword search data that can boost social media engagement. That's a lot to consider.

For this reason, using data from Google — and Google Trends in particular — could be a game-changer for social media marketers looking for an edge over their competition. To get a better idea of how to best use this data, we’ve asked experienced marketers how they’re using Google Trends for their social campaigns.

What Is Google Trends?

David Greenberg, SVP of marketing at Act-On likens Google Trends to Twitter’s Trending section, for those marketers familiar with that platform. “The difference,” he explained, “is that the website gathers, and makes public, more in-depth information about what search engine users are ‘Googling’ and when.” He says the data includes things like the search engine volume index of a keyword and the geographical locations of the users that searched for it.

“Google Trends helps marketers understand what the most popular current search queries are around the world,” added Marlee Stein, social media specialist at seoplus+. That means it’s a crucial tool for keyword research.  For instance, “if you want to talk about a certain subject, simply type in a keyword that revolves around that topic.” That way, you’ll see what regions around the world have the most Google searches for that word, and can better tailor your marketing efforts for that demographic.

Google Trends for Social Media Marketing

There are two key areas where the experts believe Google Trends can help marketers with social media marketing:

Planning Campaigns

Google Trends is often a great starting point when putting together a social media campaign. “If you understand who the top demographics are that you want to target, but you don't know where to find them,” explained Stein, “Google Trends can be your solution.” Using the tool, marketers can understand what people are talking about and where they are. These insights can drive your social media strategy planning. “If you feel as though you have a strong campaign in place, but aren't getting the results you thought you would,” continued Stein, “you might just be targeting the wrong location, or just not being specific enough with your audience.”

Google Trends, therefore, is also critical for course-correcting if your campaigns are underperforming. Stein believes a social media campaign is successful when your audience begins to spread your message as well. “If you find an audience that's already speaking about your campaign's subject,” she said, “the likelihood of your message spreading will spike.”

Choosing Hashtags

“When it comes to social media marketing,” Greenberg said, “you can use Google Trends to create more relevant hashtags.” He believes that although hashtags have been around for a while, marketers still don’t use them correctly. With Google Trends, you can find keywords that are popular in a region or demographic you want to reach, and weave them into your social media posts as hashtags. “Having three or four optimized and targeted hashtags,” he explained, “is much better than listing every single one that comes to mind.”

But marketers do still need to find a happy medium. “It’s important not to go overboard here and start keyword stuffing,” Greenberg warned, “or placing as many optimized keywords into your content as humanly possible.” Too many hashtags in social media posts can hinder readability, even if they are relevant to your target audience. “This is not only frowned upon, but it’s also very transparent to your audience.” 

Make Google Trends Part of Your Marketing Arsenal

Google Trends can be an excellent tool for marketing teams to use not just for social media marketing, but for a wide range of activities. For example, Greenberg said, “Marketers can leverage the trending topics and terms they pull from Google Trends for search engine optimization (SEO) improvements, reduced cost-per-click (CPC) and increased relevancy (and Google Quality Scores) for search engine marketing (SEM).” The tool is often underestimated, but it can be crucial for creating the right content and publishing it at the right time.

“Marketers should never rely on Google Trends as their only source of information,” Stein warned, “but it can be an excellent tool to find a topic to write about or check the relevancy of a current news story.” Google Trends, therefore, can guide all of your marketing efforts if you use it wisely.

[Source: This article was published in cmswire.com By Kaya Ismail - Uploaded by the Association Member: Wushe Zhiyang]

Categorized in Search Engine

In previous articles, we learned how to perform advanced, BERT-powered, automated intent classification in Python.

We also learned how to automatically populate Google Sheets in Python.

Wouldn’t it be cool if we could perform our intent classification directly in Google Sheets?

That is exactly what we will do here!

intent-googlsheets.gif

Introducing Google Apps Script

One limitation of the built-in functions in Google Sheets is that it limits you to predefined behavior.

The good news is that you can define custom functions with new behavior if you can code them yourself in Google Apps Script.

Google Apps Script is based on JavaScript and adds additional functionality that helps interact with Sheets, Docs and other Google Apps.

We are going to define a new custom function named fetchPrediction that will take keywords in Google Sheet cells, and run them through a BERT-powered predictive model to get the intention of search users.

Here is our plan of action:

  • Learn to review and update values in Google Sheets from Apps Script.
  • Practice fetching results from an API and populate a sheet with the retrieved values.
  • Train our BERT-powered predictive model using Uber’s Ludwig.
  • Use Ludwig to power an API we can call from Apps Script.
  • Learn some new tools and concepts that help us connect both services together.

Let’s get started!

Retrieving Keyword Data From Google Sheets

This is an empty Google sheet with some barcode related keywords we pulled from SEMrush.

In our first exercise, we will read and print the first 10 keywords from column A.

logkeywords-.png

Go to Tools > Script Editor to get started.

This is a built-in IDE (Integrated Development Environment) for Google Sheets.

We are going to write a simple JavaScript function called logKeywords that will read all the keywords in our sheet and log them to the console.

Please refer to the official documentation here.

function logKeywords() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  
  for (var i = 0; i  data.length; i++) {
      console.log('Keyword: ' + data[i][0]);
  }
}

Let’s walk over the function, step by step.

We first get a reference to the active sheet, in this case, it is Sheet1.

If you compare this code to the one we wrote in Python, you will see some advantages.

  • We didn’t need to authenticate.
  • We didn’t need to open the spreadsheet.

Got to View > Stackdriver logging. There you will get a link to the Apps Script Dashboard. Click on that to see the console logs.

It is a good idea to keep this page in another tab as you will refer to it often as your code and want to see if the changes worked.

You will see the latest log entry at the top of the list. Click on it and you will see something like the screenshot above.

Now, we printed more than 100 rows, which took a bit of time. When you are writing and testing your code, it is better to work with smaller lists.

We can make a simple change in the loop to fix that.

function logKeywords() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  
  //for (var i = 0; i  data.length; i++) {
  for (var i = 0; i  10; i++) {
      
    console.log('Keyword: ' + data[i][0]);
  }
}

Note that I hardcoded the value 10 as the limit and left a comment with the correct code.

I prefer to comment out code changes instead of deleting them as it will be easier to revert back when I’m ready to release for production use.

When you run this, it not only runs faster but checking the log is also a lot faster.

Add a Column with keyword IDs

Next, let’s learn to add data to the sheet.

We are going to write a new function named addIDtoKeywords. It creates a column with one numeric ID per keyword.

There isn’t a lot of value in doing this, but it should help you test the technique with something super simple.

Here is the code to do that.

function addIDtoKeywords() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getRange("B1");

  //build value list
  
  var values = []; 
  
  //number of keywords
  length = 100;
  
  for (var i = 1; i = length+1; i++){
    
    values.push([i]);
  }
  
  console.log(values.length);

  //Update sheet column with calculated values
  var column = sheet.getRange("B2:B102");
  

  column.setValues(values);
  
}

Select this function in the pull-down and click on the play button to run.

addids.png

You should get a new column in the sheet with numbers in increasing order.

We can also add a column header in bold named Keyword ID using the following code.

 data.setValue("Keyword ID");
 data.setFontWeight("bold");

This is what the updated output looks like.

keywordid.png

It is a very similar code. Let’s review the changes.

I added a JavaScript array named values to hold the keyword IDs.

During the loop, I added a line to add each ID generated within the loop to the array.

values.push([i]);

I printed the length of the value array at the end of the loop to make sure the correct number of IDs was generated.

Finally, I need to get the values to the sheet.

 var column = sheet.getRange("B2:B102");

This code selects the correct cells to populate and then I can simply set their value using the list I generated.

 column.setValues(values);

It can’t get simpler than this!

Fetching API Results From Apps Script

In the next exercise, we will learn to perform API requests from Apps Script.

I recommend you follow this codelab from Google to get familiar with some of the more advanced concepts.

We are going to adapt code from step 11 which pulls data from a Books API.

Instead of fetching books, we will translate keywords using the Google Translate API.

Now, we are starting to write more useful code!

Here is a new function named fetchTranslation based on code adapted from step 11.

function fetchTranslation(TEXT){
  API_KEY="INPUT YOUR API KEY";

  TEXT = encodeURI(TEXT); //"My name is Steve" -> "My%20name%20is%20Steve";
  
  var url = `https://translation.googleapis.com/language/translate/v2?target=es&key=${API_KEY}&q=${TEXT}`;
      
  //console.log(url);
  
  var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
  
  var json = response.getContentText();
  
  //console.log(json);
  
  translation = JSON.parse(json);
  
  return translation["data"]["translations"][0]["translatedText"];
  
}

This function takes an input text, encodes it and inserts it into an API URL to call the Google Translate service.

There is an API key we need to get and also we need to enable to Translate service. I also recommend restricting the API to the IP you are using to test during development.

api_key.png

Once we have the API URL to call, it is as simple as calling this code.

  var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});

The next lines get us the response in JSON format and after a bit of navigation down the JSON tree, we get the translated text.

As you can see in my code, I like to log almost every step in the code to the console to confirm it is doing what I expect.

Here is one example of how I figured out the correct JSON path sequence.

//console.log(translation["data"]);

//console.log(translation["data"]["translations"]);

//console.log(translation["data"]["translations"][0]);

//console.log(translation["data"]["translations"][0]["translatedText"]);
fetchtranslation.png

You can see the progression in the logs here, including the final output.

Translating Keywords

As we tested the function and it works, we can proceed to create another function to fetch and translate the keywords from the sheet.

We will build up from what we’ve learned so far.

We will call this function a super original name TranslateKeywords!

function TranslateKeywords() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var header = sheet.getRange("B1");

  // Add a new header column named Translation
  header.setValue("Translation");
  header.setFontWeight("bold");
  
  //var keyword = "barcode generator"; 
  var keyword = sheet.getRange("A2").getValue();
  
  console.log(keyword);
  
  translated_keyword = fetchTranslation(keyword);
  
  console.log(translated_keyword);
  
  var data = sheet.getRange("B2");
  
  data.setValue(translated_keyword);

  
}

The code in this function is very similar to the one we used to set Keyword IDs.

The main difference is that we pass the keyword to our new fetchTranslation function and update a single cell with the result.

Here is what it looks like for our example keyword.

translatekeywords.png

As you can probably see, there is no for loop, so this will only update one single row/keyword. The first one.

Please complete the for loop to get the translation for all keywords as a homework exercise.

Building an Intent Classification Model

Let’s move to build our intent classification service that we will call to populate keyword intents.

In my previous deep learning articles, I’ve covered Ludwig, Uber’s AI toolbox.

I like it a lot because it allows you to build state-of-the-art deep learning models without writing a single line of code.

It is also very convenient to run in Google Colab.

We are going to follow the same steps I described in this article, this will give us a powerful intent prediction model powered by BERT.

Here is a quick summary of the steps you need paste into Google Colab (make sure to select the GPU runtime!).

Please refer to my article for the context:

%tensorflow_version 1.x 

import tensorflow as tf; print(tf.__version__)

!pip install ludwig

#upload Question_Classification_Dataset.csv and 'Question Report_Page 1_Table.csv'
from google.colab import files

files.upload()

import pandas as pd
df = pd.read_csv("Question_Classification_Dataset.csv", index_col=0)

!wget https://storage.googleapis.com/bert_models/2018_10_18/uncased_L-12_H-768_A-12.zip
!unzip uncased_L-12_H-768_A-12.zip

# create the ludwig configuration file for BERT-powered classification
template="""
input_features:
-
name: Questions
type: text
encoder: bert
config_path: uncased_L-12_H-768_A-12/bert_config.json
checkpoint_path: uncased_L-12_H-768_A-12/bert_model.ckpt
preprocessing:
word_tokenizer: bert
word_vocab_file: uncased_L-12_H-768_A-12/vocab.txt
padding_symbol: '[PAD]'
unknown_symbol: '[UNK]'
output_features:
-
name: Category0
type: category
-
name: Category2
type: category
text:
word_sequence_length_limit: 128
training:
batch_size: 32
learning_rate: 0.00002
"""
with open("model_definition.yaml", "w") as f:
    f.write(template)
!pip install bert-tensorflow

!ludwig experiment \
  --data_csv Question_Classification_Dataset.csv\
  --model_definition_file model_definition.yaml

After completing these steps in Google Colab, we should get a high accuracy predictive model for search intent.

We can verify the predictions with this code.

test_df = pd.read_csv("Question Report_Page 1_Table.csv")
#we rename Query to Questions to match what the model expects

predictions = model.predict(test_df.rename(columns={'Query': 'Questions'} ))

test_df.join(predictions)[["Query", "Category2_predictions"]]

We get a data frame like this one.

predictions-.png

The intentions predicted are not the ones you typically expect: navigational, transactional, informational, but they are good enough to illustrate the concept.

Please check an awesome article by Kristin Tynski that explains how to expand this concept to get true search intents.

Turning Our Model Into an API Service

Ludwig has one super cool feature that allows you to serve models directly as an API service.

The command for this is Ludwig serve.

I was trying to accomplish the same thing following a super complicated path because I didn’t check that something like this already existed. 

It is not installed by default, we need to install it with this command.

!pip install ludwig[serve]

We can check the command-line options with:

!ludwig serve --help
ludwig-serve-.png

Creating an API from our model is as simple as running this command.

!ludwig serve -m results/experiment_run/model

INFO:     Started server process [5604]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO:     Shutting down
INFO:     Finished server process [5604]

As we are running this code in the notebook, we need to use a little trick to push this process to the background (a separate thread).

%%bash --bg

nohup ludwig serve -m results/experiment_run/model > debug.log 2>&1

The magic command %%bash –bg runs the shellcode in a separate thread returning control to the notebook so we can run code that can interact with the service.

I found this to be a super cool and valuable trick. I’m also introducing more shell tricks that I learned many years ago.

The nohup command prevents the process from getting killed when the parent dies. It is optional here.

The code 2>&1 redirects the standard error to the standard input and both are then sent to the file debug.log. You can learn more about this technique here.

We can track the progress of the background process using this command.

!tail debug.log

After you see this message, you can proceed to the next step.

INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

Let’s send a test API request using curl to see if the service works.

!curl http://0.0.0.0:8000/predict -X POST -F 'Questions=who is the boss?'

You should get this response back.

{"Category0_predictions":"HUMAN","Category0_probabilities_":0.00021219381596893072,"Category0_probabilities_ENTITY":7.17515722499229e-05,"Category0_probabilities_HUMAN":0.9988889098167419,"Category0_probabilities_DESCRIPTION":0.000423480843892321,"Category0_probabilities_NUMERIC":2.7793401386588812e-05,"Category0_probabilities_LOCATION":0.0003020864969585091,"Category0_probabilities_ABBREVIATION":7.374086999334395e-05,"Category0_probability":0.9988889098167419,"Category2_predictions":"ind","Category2_probabilities_":8.839580550557002e-05,"Category2_probabilities_ind":0.9759176969528198,"Category2_probabilities_other":0.0013697665417566895,"Category2_probabilities_def":3.929347076336853e-05,"Category2_probabilities_count":4.732362140202895e-05,"Category2_probabilities_desc":0.014149238355457783,"Category2_probabilities_manner":7.225596345961094e-05,"Category2_probabilities_date":7.537546480307356e-05,"Category2_probabilities_cremat":0.00012272763706278056,"Category2_probabilities_reason":0.00042629052768461406,"Category2_probabilities_gr":0.0025540771894156933,"Category2_probabilities_country":0.0002626778441481292,"Category2_probabilities_city":0.0004305317997932434,"Category2_probabilities_animal":0.00024954770924523473,"Category2_probabilities_food":8.139225974446163e-05,"Category2_probabilities_dismed":7.852958515286446e-05,"Category2_probabilities_termeq":0.00023714809503871948,"Category2_probabilities_period":4.197505040792748e-05,"Category2_probabilities_money":3.626687248470262e-05,"Category2_probabilities_exp":5.991378566250205e-05,"Category2_probabilities_state":0.00010361814202042297,"Category2_probabilities_sport":8.741072088014334e-05,"Category2_probabilities_event":0.00013374585250858217,"Category2_probabilities_product":5.6306344049517065e-05,"Category2_probabilities_substance":0.00016623239207547158,"Category2_probabilities_color":1.9601659005274996e-05,"Category2_probabilities_techmeth":4.74867774755694e-05,"Category2_probabilities_dist":9.92789282463491e-05,"Category2_probabilities_perc":3.87108520953916e-05,"Category2_probabilities_veh":0.00011915313370991498,"Category2_probabilities_word":0.00016430433606728911,"Category2_probabilities_title":0.0010781479068100452,"Category2_probabilities_mount":0.00024070330255199224,"Category2_probabilities_body":0.0001515906333224848,"Category2_probabilities_abb":8.521509153069928e-05,"Category2_probabilities_lang":0.00022924368386156857,"Category2_probabilities_plant":4.893113509751856e-05,"Category2_probabilities_volsize":0.0001462997024646029,"Category2_probabilities_symbol":9.98345494735986e-05,"Category2_probabilities_weight":8.899033855414018e-05,"Category2_probabilities_instru":2.636547105794307e-05,"Category2_probabilities_letter":3.7610192521242425e-05,"Category2_probabilities_speed":4.142118996242061e-05,"Category2_probabilities_code":5.926147059653886e-05,"Category2_probabilities_temp":3.687662319862284e-05,"Category2_probabilities_ord":6.72415699227713e-05,"Category2_probabilities_religion":0.00012743560364469886,"Category2_probabilities_currency":5.8569487009663135e-05,"Category2_probability":0.9759176969528198}

Exposing Our Service Using Ngrok

So, we have a new API that can make intent predictions, but one big problem is that it is only accessible from within our Colab notebook.

Let me introduce another cool service that I use often, Ngrok.

Ngrok helps you create publicly accessible URLs that connect to a local service like the one we just created.

I do not recommend doing this for production use, but it is very handy during development and testing.

You don’t need to create an account, but I personally do it because I get to set up a custom subdomain that I use very frequently.

Here are the steps to give our API a public URL to call from App Script.

!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip && unzip ngrok-stable-linux-amd64.zip

We first download and uncompress ngrok.

%%bash --bg

./ngrok http -hostname=api.yourdomain.com 8000 2> ngrok.log

The code above tells ngrok to connect to the local service in port 8000. That is all we need to do.

!curl http://api.yourdomain.com/predict -X POST -F 'Questions=who is the boss?'

You can confirm it works by repeating the curl call, but calling the public URL. You should get the same result.

If you don’t want to set up a custom domain, you can use this code instead.

%%bash --bg

./ngrok http 8000 2> ngrok.log

This will generate a random public URL and you get retrieve with this code.

!curl -s http://localhost:4040/api/tunnels | python3 -c \

    "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

Now, we get back to our final steps.

Fetching Intent Predictions

We are going to adapt the code we used to make Google Translate API requests so we can make intent prediction requests.

One big difference between the two API services is that we need to make HTTP POST requests instead of simpler HTTP GET requests.

Let’s see how that changes our code and learn a bit more about HTTP in the process.

function fetchPrediction(question = "who is the boss?"){
  
  TEXT = encodeURI(TEXT);
  
  console.log(TEXT);
  
  var url = "http://api.yourdomain.com/predict";
  
   var options = {
    "method" : "POST",
    "contentType" : "application/x-www-form-urlencoded",
    "payload" : TEXT,
    'muteHttpExceptions': true 
  };
        
  var response = UrlFetchApp.fetch(url, options);
  
  var json = response.getContentText();
  
  //console.log(json);
  
  prediction = JSON.parse(json);
  
  //console.log(prediction);

  console.log(prediction["Category0_predictions"]);
  
  return prediction["Category0_predictions"];
  
}

The function fetchPrediction calls the API service we created and returns the predicted intent. It basically reproduces the equivalent of the curl call we made Colab, but in Apps Script.

I highlighted some key changes in the code. Let’s review them.

One key difference between GET and POST requests is that in GET requests the data is passed in the URL as parameters.

In POST requests, the data is passed inside the body of the request.

We need to format the data before we pass it in the body and we need to set the correct content type so the server knows how to decode it.

This line encodes the question we are passing.

 TEXT = encodeURI(TEXT);

This is an example of what the encoded TEXT looks like.

Questions=label%20generator

The correct content type for this encoding is application/x-www-form-urlencoded. This is recommended encoding for HTML form data.

We create an options data structure where we specify these settings and the correct request type and we are set to go.

Select the function fetchPrediction from the pull-down and click on the run button.

intent-logs.png

You should see the encoded input and predicted intent in the logs.

How do we get the intentions for all the keywords in the sheet?

You might be thinking we will create another function that will read the keywords in a loop and populate the intentions. Not at all!

We can simply call this function by name directly from the sheet! How cool is that?

fetchintent.png

Resources to Learn More

Combining simple App Script functions with powerful API backends that you can code in any language opens the doors to infinite productivity hacks.

Here are some of the resources I read while putting this together.

Finally, let me highlight a very important and valuable project that JR Oakes started.

icodeseo.png

It is an awesome repository for Python and JavaScript projects from the coders in the SEO community. I plan to find time to upload my code snippets, please make sure to contribute yours.

For some reason, this non-issue keeps popping up in my Twitter feed. I will leave this tweet here as a friendly reminder. 

 [Source: This article was published in searchenginejournal.com By Hamlet Batista - Uploaded by the Association Member: Alex Gray]

Categorized in Search Engine

There's an old joke among Windows users: "Internet Explorer is the best browser to download a better browser with."

In other words, Internet Explorer — Microsoft's old flagship internet browser — has been around for years, and few people actually like it. That's a big reason why in 2015 Microsoft released Edge, their new and improved browser.

Microsoft has made a big effort with Edge to improve the browsing experience, and it's paid off. Microsoft Edge has enough features and benefits that it's actually a real alternative to more popular browsers like Chrome or Firefox.

This is especially true with the Edge's most recent update, which overhauled how the browser runs and operates.

Here's everything you need to know about Microsoft Edge, including what it offers, and how to download it on your PCMaciPhone, or Android device.

Microsoft Edge, explained

The newest version of Edge is what's called a "Chromium" browser. This means that it can run hundreds of extensions that were originally meant for Google Chrome users. This includes screen readers, in-browser games, productivity tools, and more. 

This is in addition to the extensions already in the Microsoft Store, which you can also use. If you can think of a feature you'd like the browser to have, there's probably an extension for it.

MS 1

 

You can find the Extensions menu by clicking the three dots at the top-right and clicking "Extensions." 

 

 

If you sign up for a free Microsoft account, you can sync your bookmarks, history, passwords, and more. This means that if you use Edge on a different computer, you'll have all of your browsing data available in moments.

MS 2.jpg

 

Like with Google Chrome, you can sync your browsing information to your email account. 

 

 

Reviews have also said that this new version of Edge runs faster than previous versions, putting it about on par with Chrome and Firefox.

If you'd like to give Microsoft Edge a try, you can download it from the Edge website, here.

The page should automatically detect whether you're using a Mac, PC, iPhone, or Android device. If you think the page has gotten it wrong, click the arrow next to the "Download" button to see all the available versions.

MS 3.jpg

 

[Source: This article was published in businessinsider.com By Ross James - Uploaded by the Association Member: Alex Gray]

Categorized in Search Engine

This was a pretty busy week, we may have had a Google search algorithm update this week and maybe, just maybe, Forbes got hit hard by it. Google is probably going to revert the favicon and black ad label user interface, lots of tests are going on now. Bing hides the ad label as well, it isn’t just Google. I posted a summary of everything you need to know about the Google feature snippet deduplication change, including Google might be giving us performance data on them, images in featured snippets may change, Google will move the right side featured snippet to the top and until then it stopped deduplicating the right side feature snippets. Google Search Console launched a new removals tool with a few set of features. Google may have issues indexing international pages. Google says they treat links in PDFs as nofollowed links but that contradicts earlier statements. Google said schema markup will continue to get more complicated. Google said do not translate your image URLs. I shared a fun people also ask that looks like an ad, but is not an ad. Google Assistant Actions do not give you a ranking boost. Google is still using Chrome 41 as the user agent when requesting resources but not for rendering. Google Ads switched all campaign types to standard delivery. Google My Business suspensions are at an all time high. Google Chrome is testing hiding URLs for the search results page. Google is hiring an SEO. I posted two vlogs this week, one with Thom Craver and one with Lisa Barone. Oh and if you want to help sponsor those vlogs, go to patreon.com/barryschwartz. That was the search news this week at the Search Engine Roundtable.

Make sure to subscribe to our video feed or subscribe directly on iTunes to be notified of these updates and download the video in the background. Here is the YouTube version of the feed:

Search Topics of Discussion:

 [Source: This article was published in seroundtable.com By Barry Schwartz - Uploaded by the Association Member: Olivia Russell]

Categorized in Search Engine

Google is enhancing its Collections in Search feature, making it easy to revisit groups of similar pages.

Similar to the activity cards in search results, introduced last year, Google’s Collections feature allows users to manually create groups of like pages.

Now, using AI, Google will automatically group together similar pages in a collection. This feature is compatible with content related to activities like cooking, shopping, and hobbies.

collection.jpeg

This upgrade to collections will be useful in the event you want to go back and look at pages that weren’t manually saved. Mona Vajolahi, a Google Search Product Manager, states in an announcement:

“Remember that chicken parmesan recipe you found online last week? Or that rain jacket you discovered when you were researching camping gear? Sometimes when you find something on Search, you’re not quite ready to take the next step, like cooking a meal or making a purchase. And if you’re like me, you might not save every page you want to revisit later.”

These automatically generated collections can be saved to keep forever, or disregarded if not useful. They can be accessed any time from the Collections tab in the Google app, or through the Google.com side menu in a mobile browser.

Once a collection is saved, Google can help users discover even more similar pages by tapping on the “Find More” button. Google is also adding a collaboration feature that allow users to share and work on creating collections with other people.

Auto-generated collections will start to appear for US English users this week. The ability to see related content will launch in the coming weeks.

[Source: This article was published in searchenginejournal.com By Matt Southern - Uploaded by the Association Member: Logan Hochstetler]

Categorized in Search Engine
Page 1 of 89

airs logo

Association of Internet Research Specialists is the world's leading community for the Internet Research Specialist and provide a Unified Platform that delivers, Education, Training and Certification for Online Research.

Get Exclusive Research Tips in Your Inbox

Receive Great tips via email, enter your email to Subscribe.

Follow Us on Social Media