Get 15% Discount on your first purchase

Cart (0)
NLP Techniques

What is Natural Language processing (NLP)

Natural language processing (NLP) is the relationship between computers and human language. More specifically, natural language processing is the computer understanding, analysis, manipulation, and/or generation of natural language. Will a computer program ever be able to convert a piece of English text into a programmer-friendly data structure that describes the meaning of the natural language text? Unfortunately, no consensus has emerged about the form or the existence of such a data structure. Until such fundamental Artificial Intelligence problems are resolved, computer scientists must settle for the reduced objective of extracting simpler representations that describe limited aspects of the textual information.


Natural language processing (NLP) can be defined as the automatic (or semi-automatic) processing of human language. The term ‘NLP’ is sometimes used rather more narrowly than that, often excluding information retrieval and sometimes even excluding machine translation. NLP is sometimes contrasted with ‘computational linguistics’, with NLP being thought of as more applied. Nowadays, alternative terms are often preferred, like ‘Language Technology’ or ‘Language Engineering’. Language is often used in contrast with speech (e.g., Speech and Language Technology). But I’m going to simply refer to NLP and use the term broadly. NLP is essentially multidisciplinary: it is closely related to linguistics (although the extent to which NLP overtly draws on linguistic theory varies considerably).

What is it?

NLP is a way for computers to analyze, understand, and derive meaning from human language in a smart and useful way. By utilizing NLP, developers can organize and structure knowledge to perform tasks such as automatic summarization, translation, named entity recognition, relationship extraction, sentiment analysis, speech recognition, and topic segmentation. NLP is used to analyze text, allowing machines to understand how humans speak. This human-computer interaction enables real-world applications like automatic text summarization, sentiment analysis, topic extraction, named entity recognition, parts-of-speech tagging, relationship extraction, stemming, and more. NLP is commonly used for text mining, machine translation, and automated question-answering.

NLP Techniques

Figure1: NLP Techniques

Importance of NLP

Earlier approaches to NLP involved a more rules-based approach, where simpler machine learning algorithms were told what words and phrases to look for in text and given specific responses when those phrases appeared. But deep learning is a more flexible, intuitive approach in which algorithms learn to identify speakers' intent from many examples, almost like how a child would learn human language.

The advantage of natural language processing can be seen when considering the following two statements: "Cloud computing insurance should be part of every service level agreement" and "A good SLA ensures an easier night's sleep -- even in the cloud." If you use national language processing for search, the program will recognize that cloud computing is an entity, that cloud is an abbreviated form of cloud computing, and that SLA is an industry acronym for service level agreement.

Some Linguistic Terminology

The subareas loosely correspond to some of the standard subdivisions of linguistics:

  • Morphology: the structure of words. For instance, unusually can be thought of as composed of a prefix un-, a stem usual, and an affix -ly. Composed is compose plus the inflectional affix -ed: a spelling rule means we end up with composed rather than composed.
  • Syntax: The way words are used to form phrases. e.g., it is part of English syntax that a determiner such as the will come before a noun, and also that determiners are obligatory with certain singular nouns.
  • Semantics: Compositional semantics is the construction of meaning (generally expressed as logic) based on syntax. This is contrasted to lexical semantics, i.e., the meaning of individual words.


Here are a few common ways NLP is being used today:

  • Spell check functionality in Microsoft Word is the most basic and well-known application.
  • Text analysis, also known as sentiment analytics, is a key use of NLP. Businesses can use it to learn how their customers feel emotionally and use that data to improve their service.
  • By using email filters to analyze the emails that flow through their servers, email providers can use Naive Bayes spam filtering to calculate the likelihood that an email is spam based its content.
  • Call center representatives often hear the same, specific complaints, questions, and problems from customers. Mining this data for sentiment can produce incredibly actionable intelligence that can be applied to product placement, messaging, design, or a range of other uses.
  • Google, Bing, and other search systems use NLP to extract terms from text to populate their indexes and parse search queries
  • Google Translate applies machine translation technologies in not only translating words, but also in understanding the meaning of sentences to improve translations.
  • Financial markets use NLP by taking plain-text announcements and extracting the relevant info in a format that can be factored into making algorithmic trading decisions. For example, news of a merger between companies can have a big impact on trading decisions, and the speed at which the particulars of the merger (e.g., players, prices, who acquires who) can be incorporated into a trading algorithm can have profit implications in the millions of dollars.

A Few NLP Examples

  • Use Summarizer to automatically summarize a block of text, exacting topic sentences, and ignoring the rest.
  • Generate keyword topic tags from a document using LDA (Latent Dirichlet Allocation), which determines the most relevant words from a document. This algorithm is at the heart of the Auto-Tag and Auto-Tag URL micro-services
  • Sentiment Analysis, based on Stanford NLP, can be used to identify the feeling, opinion, or belief of a statement, from very negative, to neutral, to very positive.


[1] Ann Copestake, “Natural Language Processing”, 2004, 8 Lectures, available online at:

[2] Ronan Collobert and Jason Weston, “Natural Language Processing (Almost) from Scratch”, Journal of Machine Learning Research 12 (2011) pp. 2493-2537

[3] “Top 5 Semantic Technology Trends to look for in 2017”, available online at:

Read More
Social Network Community Structure

What is Community Detection

Community detection is one of the most relevant topics to the machine learning technique clustering. The community term is being used to indicate a group of similar objects based on their differential behaviors.  However, Advances in technology and computation have provided the possibility of collecting and mining a massive amount of real-world data. Mining such “big data” allows us to understand the structure and function of real systems and to find unknown and interesting patterns. This section provides a brief overview of the community structure.


In the actual interconnected world, and with the rising of online social networks graph mining and community detection become completely up-to-date. Understanding the formation and evolution of communities is a long-standing research topic in sociology in part because of its fundamental connections with the studies of urban development, criminology, social marketing, and several other areas. With the increasing popularity of online social network services like Facebook, the study of community structures assumes more significance. Identifying and detecting communities are not only of particular importance but have immediate applications. For instance, for effective online marketing, such as placing online ads or deploying viral marketing strategies [1], identifying communities in social networks could often lead to more accurate targeting and better marketing results. Albeit online user profiles or other semantic information is helpful to discover user segments this kind of information is often at a coarse-grained level and overlooks community structure that reveals rich information at a fine-grained level.


Many real-world complex systems, such as social or computer networks can be modeled as large graphs, called complex networks. Because of the increasing volume of data and the need to understand such huge systems, complex networks have been extensively studied over the last ten years. Communities are clearly overlapping in real-world systems, especially in social networks, where every individual belongs to various communities: family, colleagues, groups of friends, etc. Finding all these overlapping communities in a huge graph is very complex: in a graph of nodes, there are  2n such possible communities and such possible community structures. Even if these communities could be efficiently computed, it may lead to uninterruptable results. Because of the complexity of overlapping communities’ detection, most studies have restricted the community structure to a partition, where each node belongs to one and only one community [14].

Identifying network communities can be viewed as a problem of clustering a set of nodes into communities, where a node can belong to multiple communities at once. Because nodes in communities share common properties or attributes, and because they have many relationships among themselves, there are two sources of data that can be used to perform the clustering task. The first is the data about the objects (i.e., nodes) and their attributes. Known properties of proteins, users’ social network profiles, or authors’ publication histories may tell us which objects are similar, and to which communities or modules they may belong. The second source of data comes from the network and the set of connections between the objects. Users form friendships, proteins interact, and authors collaborate [14].


Community detection is a key to understanding the structure of complex networks, and ultimately extracting useful information from them. An excessively studied structural property of real-world networks is their community structure. The community structure captures the tendency of nodes in the network to group together with other similar nodes into communities. This property has been observed in many real-world networks. Despite excessive studies of the community structure of networks, there is no consensus on a single quantitative definition for the concept of community and different studies have used different definitions. A community, also known as a cluster, is usually thought of as a group of nodes that have many connections to each other and few connections to the rest of the network. Identifying communities in a network can provide valuable information about the structural properties of the network, the interactions among nodes in the communities, and the role of the nodes in each community [15].

In the clustering framework, a community is a cluster of nodes in a graph, but a very important question is what a cluster is. but most of the time, the objects in a cluster must be more similar than objects out of this cluster: the objects are clustered or grouped based on the principle of maximizing the intra-class similarity and minimizing the inter-class similarity. Let us remark that, this definition implies the necessity to define the notions of similarity measure and/or cluster fitness measure

Social Network Community Structure

Figure 1: Social Network Community Structure

Community detection has been widely used in social network analysis to study the behavior and interaction patterns of people in social networks. Community detection is also important to identify powerful nodes in the network, based on their structural position to initiate influential campaigns.


[12] Chayant Tantipathananandh, “Detecting and Tracking Communities in Social Networks”, Dissertation Northwestern University, 2013

[2] J. Chang and D. M. Blei, Relational topic models for document networks. In AISTATS ’09, 2009

[3] Clara Granell, Sergio G´omez and Alex Arenas, “Data clustering using community detection algorithms”, Int. J. Complex Systems in Science volume 1 (2011), pp. 21–24

[4] S. Fortunato, “Community detection in graphs”, Physics Reports, vol. 486, no. 3-5, pp. 75 – 174, 2010, online available at: 1/2/99061fac6435db4343b2374d26e64ac1

Read More
Context Aware Computing

what is Context Aware Computing

Context-aware computing promises a smooth interaction between humans and technology but few studies have been conducted regarding how autonomously an application should perform. Context-aware computing is a style of computing in which situational and environmental information about people, places, and things is used to anticipate immediate needs and proactively offer enriched situation-aware, and usable content, functions, and experiences. The notion of context is much more widely appreciated today. The term “context-aware computing” is commonly understood by those working in ubiquitous/pervasive computing, where it is felt that context is key in their efforts to disperse and enmesh computation into our lives.


Context is a powerful, and longstanding, concept in human-computer interaction. Interaction with computation is by explicit acts of communication (e.g., pointing to a menu item), and the context is implicit (e.g., default settings). Context can interpret explicit acts, making communication much more efficient. Thus, carefully embedding computing into the context of our lived activities can serve us with minimal effort on our part. Communication can be not only effortless but also naturally fit in with our ongoing activities.

A great deal of effort has gone into the field of context-aware computing over the past few years, building applications that have a greater awareness of the physical and social situations in which they are embedded. From a computational perspective, there are four goals for context-aware computing:

  • Increasing the number of input channels into computers
  • Pushing towards the more implicit acquisition of data
  • Creating better models that can take advantage of this increased input
  • Using the increased input and improved models in new and useful ways

Context-aware computing is not a new concept, but the ongoing mobile revolution makes it both necessary and feasible. Context-aware computing involves first acquiring context and then taking context-dependent actions.

  • Necessary because the mobile phone display is small and information must be delivered with much higher relevance and precision to meet user needs.
  • Feasible because small, light-weight mobile devices allow users to almost always carry them around, and much can be learned via a phone about its user’s habits and states

Context Aware Computing

Figure 1: Context-Aware Computing

Context-aware computing can be applied to benefit applications in many areas including but not limited to information retrieval, facility management, and productivity enhancement, in addition to the aforementioned three examples representing power management, health care, and commerce, respectively.

Defining Context Aware Computing

The Context-Aware Computing group uses "context knowledge" such as where we are, how we feel and what we have done to drive machines to use our intentions to work with us. Context awareness is the ability of a system or system component to gather information about its environment at any given time and adapt behaviors accordingly. Contextual or context-aware computing uses software and hardware to automatically collect and analyze data to guide responses.

Context-aware computing is essentially a type of computer operation that anticipates cases of use or, in other words, works in customized ways based on the context of user activities. This can apply either to a user's activities on the device, or the physical environment in which the device is being used. Context-aware computing has a lot in common with the principles of human-computer interaction; one notable difference, however, is that, with context-aware computing, most of the solutions that deliver this higher and more sophisticated functionality are applied at runtime, according to input, on the overall context of that particular use.


Examples of context-aware computing include the new design of mobile devices that switch between a vertical and a landscape orientation depending on how they are positioned. Another example is devices that change their screens and backlighting according to the amount of light in the room where they are being used. One very new concept that could be called context-aware computing is the inclusion of mechanical and sensory elements in future mobile devices that help them adjust themselves to minimize damage when they are dropped. Context-aware computing seeks to anticipate the ways that computers will need support from users in specific situations, whether it is indoors or outdoors, on manufacturing floors or in offices, or in any other kind of situation where a person relies on a piece of hardware to complete a task. This is a major element in the design of cutting-edge technology for today's consumer and business markets.


[1] Chang, Edward Y, "Context-aware computing: opportunities and open issues." Proceedings of the VLDB Endowment 6, no. 11 (2013), pp. 1172-1173

[2] Schilit, Bill, Norman Adams, and Roy Want, "Context-aware computing applications", In Mobile Computing Systems and Applications, WMCSA, First Workshop on, pp. 85-90, IEEE, 1994.

[3] Context-Aware Computing, available online at:

Read More